home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / 173c_bas.zip / SOURCE / CNFG-SUB.BAS next >
BASIC Source File  |  1991-09-01  |  102KB  |  2,371 lines

  1. ' $linesize:132
  2. ' $title: 'CNFG-SUB.BAS 17.3C, Copyright 1987-91 by D. Thomas Mack'
  3. '  Copyright 1991 by D. Thomas Mack, all rights reserved.
  4. '  Name ...............: CNFG-SUB.BAS
  5. '  First Released .....: February 11, 1990
  6. '  Subsequent Releases.: August 26, 1990, October 28, 1990, Sept 1, 1991
  7. '  Copyright ..........: 1987-91
  8. '  Purpose.............: The Remote Bulletin Board System for the IBM PC,
  9. '                        RBBS-PC, configuration program -- CONFIG.BAS
  10. '                        utilizes a lot of menus and string space.
  11. '                        These are incorporated within CNFG-SUB.BAS as a
  12. '                        seperately callable subroutines in order to free
  13. '                        up as much code as possible within the 64K code
  14. '                        segment used by CONFIG.BAS.
  15. '  Parameters..........: Most parameters are passed via a COMMON statement.
  16. '
  17. ' Subroutine  Line      Function of Subroutine
  18. '    Name    Number
  19. ' ALLCAPS    61212+     Captialize a string
  20. ' ANSIDECODE 62040+     Convert ANSI strings into english text expressions
  21. ' ANYINTEGER 61450      Prompt for any integer
  22. ' ANYNUMBER  61400      Prompt for any number
  23. ' ASKRO      61100      Ask a question on a specific row
  24. ' ASKUPOS    61300      Ask for identifying field in USERS record
  25. ' BRKFNAME   61830      Break file name in drive/path, prefix, extension
  26. ' CHKFMSDIR  61700      Check FMS directory for valid structure
  27. ' CHKPERSDIR 61755      Check Personal directory format
  28. ' CNFGINIT   60385      Initialize CONFIG's constants
  29. ' COLORCODE  62040+     Convert response into ANSI-meaningful strings
  30. ' DISPLAY    12190      Display the CONFIG menu pages
  31. ' FINDFILE   61600      Determine whether a file exists
  32. ' FINDLAST   61850      Find last occurence of a character in a string
  33. ' GETANSI    62000      Prompt for ANSI colors to be used
  34. ' GETASCII   61810      Get any character by character or ascii value
  35. ' GETCOLOR   61950      Process request for setting color
  36. ' GETINIT    61110      Get answers that are integers
  37. ' GETNUMYN   61150      Get TRUE/FALSE answer to a YES/NO question
  38. ' GETYESNO   61200      Ask a question with a "yes" or "no" response
  39. ' HANDERR    61775+     Handle error checking for FMS directories
  40. ' MMINTEGER  61500      Prompt for integer with min and a max
  41. ' NETTYPE    60382      Prompt for supported network types
  42. ' REMOVE     61800      Remove characters from a string
  43. ' SECURE     61860      Allow commands and their security level to be changed
  44. ' SELMODEM   62100      Select modem to set modem strings
  45. ' TRIMTRAIL  61840      Remove trailing characters from a string
  46. '
  47. '  $INCLUDE: 'CNFG-VAR.BAS'
  48. '
  49. '  $SUBTITLE: 'DISPLAY - subroutine to display CONFIG's menus'
  50. '  $PAGE
  51. '
  52. '  SUBROUTINE NAME    --  DISPLAY
  53. '
  54. '  INPUT PARAMETERS   --  PARAMETER        DESCRIPTION
  55. '                         IX = 0           DISPLAY THE CHOICE OF MENUS
  56. '                         IX = -1          RE-READ THE INPUT (INVALID REQUEST)
  57. '                         IX > 0           DISPLAY THE APPROPRIATE PAGE
  58. '
  59. '  OUTPUT PARAMETERS  --  HJ$              OPTION SELECTED
  60. '                         IPAGE            MENU PAGE CONTAINING OPTION
  61. '                         ILOOKUP          INDEX (1 TO 20) OF OPTION SELECTED
  62. '
  63. '  SUBROUTINE PURPOSE --  TO DISPLAY CONFIG'S MENUS AND REQUEST OPTION
  64. '
  65.       SUB DISPLAY STATIC
  66. '
  67. ' *  DISPLAY CONFIG'S MAIN FUNCTION KEY MENU
  68. '
  69.       IF IX > 0 THEN _
  70.          GOTO 12320
  71.       IF IX = -1 THEN _
  72.          GOTO 12590
  73. 12190 COLOR FG,BG,BORDER
  74.       CLS
  75.       DISPLAYED.PAGE.NUMBER = 0
  76.       I! = FRE(C$)
  77.       COLOR 0,7,0
  78.       LOCATE 4,10
  79.       PRINT "RBBS-PC "+ CONFIG.VERSION$ + " CONFIGURATION PROGRAM "
  80.       COLOR FG,BG,BORDER
  81.       LOCATE 1,1,0
  82.       PRINT "Copyright (c) 1983-1990 Tom Mack"
  83.       LOCATE 2,1,0
  84.       PRINT "39 Cranbury Dr, Trumbull, CT. 06611";
  85.       IF CONFERENCE.MODE THEN _
  86.          GOSUB 24970
  87.       LOCATE  5,1
  88.       PRINT "   F1            Global RBBS-PC Parameters (part 1)
  89.       PRINT "   F2            Global RBBS-PC Parameters (part 2)
  90.       PRINT "   F3            Global RBBS-PC Parameters (part 3)
  91.       PRINT "   F4            RBBS-PC System Files (part 1)
  92.       PRINT "   F5            RBBS-PC System Files (part 2)
  93.       PRINT "   F6            Parameters for RBBS-PC's 'Doors'
  94.       PRINT "   F7            Parameters for RBBS-PC's Security (part 1)
  95.       PRINT "   F8            Parameters for RBBS-PC's Security (part 2)
  96.       PRINT "   F9            Parameters for multiple RBBS-PC's
  97.       PRINT "  F10            RBBS-PC utilities
  98.       PRINT "  Shift-F1       RBBS-PC File Management Faciliites"
  99.       PRINT "  Shift-F2       RBBS-PC Communications Parameters (part 1)
  100.       PRINT "  Shift-F3       RBBS-PC Communications Parameters (part 2)
  101.       PRINT "  Shift-F4       Parameters for RBBS-PC NET-MAIL
  102.       PRINT "  Shift-F5       New users parameters"
  103.       PRINT "  Shift-F6       Library Sub-System"
  104.       PRINT "  Shift-F7       RBBS-PC Color parameters"
  105.       PRINT "  Shift-F8       Reserved for future use"
  106.       XX$ = "Press END to terminate or Function Key to select page "
  107.       GOSUB 50345
  108.       LOCATE ,,1
  109. 12310 GOSUB 22160
  110. 12320 IF IX THEN _            'IX    Key    Where to branch to
  111.          ON IX GOTO 12360, _  ' 1       F1 - Global Parameters (Part 1)
  112.                     12370, _  ' 2       F2 - Global Parameters (Part 2)
  113.                     12380, _  ' 3       F3 - Global Parameters (Part 3)
  114.                     12390, _  ' 4       F4 - RBBS-PC System Files (Part 1)
  115.                     12400, _  ' 5       F5 - RBBS-PC System Files (Part 2)
  116.                     12410, _  ' 6       F6 - RBBS-PC "doors"
  117.                     12420, _  ' 7       F7 - RBBS-PC security parms. (Part 1)
  118.                     12466, _  ' 8       F8 - RBBS-PC security parms. (Part 2)
  119.                     12470, _  ' 9       F9 - Multiple RBBS-PC parameters
  120.                     12480, _  '10      F10 - RBBS-PC's utilities
  121.                     12490, _  '11 Shift-F1 - RBBS-PC File Manager
  122.                     12500, _  '12 Shift-F2 - RBBS-PC comm. parameters (Part 1)
  123.                     12505, _  '13 Shift-F3 - RBBS-PC comm. parameters (Part 2)
  124.                     12510, _  '14 Shift-F4 - RBBS-PC Net Mail
  125.                     12520, _  '15 Shift-F5 - New user parameters
  126.                     12530, _  '16 Shift-F6 - Library parameters
  127.                     12540, _  '17 Shift-F7 - RBBS-PC Color parameters
  128.                     12310, _  '18 Shift-F8 - Reserved for future use
  129.                     12340, _  '19     PgUp - Go to previous page
  130.                     12330, _  '20     PgDn - Go to next page
  131.                     12630, _  '21      End - Terminate CONFIG
  132.                     12350     '22    Enter - Re-display current page
  133.       GOTO 12310
  134. '
  135. ' *  COMMON ROUTINE TO HANDLE UNDEFINED OPTIONS
  136. '
  137. 12325 IX = IPAGE
  138.       GOTO 12320
  139. '
  140. ' *  COMMON ROUTINE TO HANDLE PAGE UP OF DISPLAYS
  141. '
  142. 12330 IF (DISPLAYED.PAGE.NUMBER + 1 ) > 17 THEN _
  143.          GOTO 12190
  144.       IX = DISPLAYED.PAGE.NUMBER + 1
  145.       GOTO 12320
  146. '
  147. ' *  COMMON ROUTINE TO HANDLE PAGE DOWN OF DISPLAYS
  148. '
  149. 12340 IF (DISPLAYED.PAGE.NUMBER - 1) < 1 THEN _
  150.          GOTO 12190
  151.       IX = DISPLAYED.PAGE.NUMBER - 1
  152.       GOTO 12320
  153. '
  154. ' *  RETURN TO PRIMARY MENU SELECTION DISPLAY
  155. '
  156. 12350 GOSUB 60380
  157.       GOTO 12310
  158. '
  159. ' *  COMMON CONFIGURATION PROGRAM MENU AND PAGE DISPLAY
  160. '
  161. 12360 DISPLAYED.PAGE.NUMBER = 1
  162.       GOSUB 24800
  163.       LOCATE  3,1
  164.       PRINT " 1. SYSOP's Public First Name -------------------- " + SYSOP.FIRST.NAME$
  165.       PRINT " 2. SYSOP's Public Last Name --------------------- " + SYSOP.LAST.NAME$
  166.       PRINT " 3. SYSOP's default expert mode at signon -------- " + EXPERT.USER$
  167.       PRINT " 4. SYSOP's office hours -------------------------"STR$(START.OFFICE.HOURS);" to"STR$(END.OFFICE.HOURS)
  168.       PRINT " 5. Page SYSOP using printer's bell -------------- " + M11$
  169.       PRINT " 6. Go off-line whenever a DISK FULL occurs ------ " ; FNYESNO$(DISKFULL.GO.OFFLINE)
  170.       PRINT " 7. Prompt bell default is ----------------------- " + PROMPT.BELL$
  171.       PRINT " 8. Maximum time per session (in minutes) --------"STR$(MINUTES.PER.SESSION!)
  172.       PRINT " 9. Maximum minutes per day ----------------------";STR$(MAX.PER.DAY)
  173.       PRINT "10. Factor to extend session time for uploads ----" + STR$(UPLOAD.TIME.FACTOR!)
  174.       PRINT "11. # Months of inactivity before user deleted ---"STR$(ACT.MNTHS.B4.DELETING)
  175.       PRINT "12. Name of RBBS-PC shown initially is ----------- " + RBBS.NAME$
  176.       PRINT "13. Foreground color (for color monitors) is -----"STR$(FG)
  177.       PRINT "14. Background color (for color monitors) is -----"STR$(BG)
  178.       PRINT "15. The border color (for color monitors) is -----"STR$(BORDER)
  179.       PRINT "16. Your CONFIG.SYS contains 'DEVICE=ANSI.SYS'---- " + FNYESNO$(DOSANSI)
  180.       IF SMART.TEXT THEN _
  181.          SMART.TEXT$ = STR$(SMART.TEXT) _
  182.       ELSE SMART.TEXT$ = NONE.PICKED$
  183.       PRINT "17. Control character for SMART TEXT -------------" + SMART.TEXT$
  184.       PRINT "18. File with automatic operator page parameters - " ; AUTOPAGE.DEF$
  185.       X = INSTR("ANS",LOGON.MAIL.LEVEL$)
  186.       IF X < 1 THEN _
  187.          X = 1
  188.       X$ = MID$("OLD & NEWNEW ONLY NONE",9*X-8,9)
  189.       IF X$ = "NONE" THEN _
  190.          X$ = NONE.PICKED$
  191.       PRINT "19. Personal mail notification level at logon is - " + X$
  192.       GOTO 12580
  193. 12370 DISPLAYED.PAGE.NUMBER = 2
  194.       GOSUB 24800
  195.       LOCATE  3,1
  196.       PRINT "21. Remind users of messages that they left ------ " + FNYESNO$(MESSAGE.REMINDER)
  197.       PRINT "22. Remind users of # uploads and downloads? ----- " + FNYESNO$(REMIND.FILE.TRANSFERS)
  198.       PRINT "23. Remind users of their terminal profile? ------ " + FNYESNO$(REMIND.PROFILE)
  199.       PRINT "24. Enable download of new files at logon -------- " + FNYESNO$(NEW.FILES.CHECK)
  200.       PRINT "25. Default user page length is ------------------" + STR$(PAGE.LENGTH)
  201.       PRINT "26. Maximum number of lines allowed per message --" + STR$(MAX.MESSAGE.LINES)
  202.       PRINT "27. Is system 'welcome' interruptable? ----------- " + FNYESNO$(WELCOME.INTERRUPTABLE)
  203.       PRINT "28. Are system bulletins to be 'optional'? ------- " + FNYESNO$(BULLETINS.OPTIONAL)
  204.       PRINT "29. Type of PC RBBS-PC will be running on? ------- " + COMPUTER.TYPE$
  205.       PRINT "30. Symbols to use for SYSOP commands ------------ " + SYSOP.COMMANDS$
  206.       PRINT "31. Symbols to use for MAIN menu commands -------- " + MAIN.COMMANDS$
  207.       PRINT "32. Symbols to use for FILE menu commands -------- " + FILE.COMMANDS$
  208.       PRINT "33. Symbols to use for UTILITIES menu commands --- " + UTIL.COMMANDS$
  209.       PRINT "34. Symbols to use for global commands ----------- " + GLOBAL.COMMANDS$
  210.       PRINT "35. Show section in command prompt --------------- " + FNYESNO$(SHOW.SECTION)
  211.       PRINT "36. Show commands in command prompt -------------- " + FNYESNO$(COMMANDS.IN.PROMPT)
  212.       PRINT "37. Restrict valid commands to current section --- " + FNYESNO$(RESTRICT.VALID.CMDS)
  213.       PRINT "38. Use machine language routines for speed ------ " + FNYESNO$(TURBO.RBBS)
  214.       PRINT "39. Use BASIC PRINT for screen writes ------------ " + FNYESNO$(USE.BASIC.WRITES)
  215.       PRINT "40. # of lines for extended file descriptions ----" + STR$(MAX.EXTENDED.LINES)
  216.       GOTO 12580
  217. 12380 DISPLAYED.PAGE.NUMBER = 3
  218.       GOSUB 24800
  219.       LOCATE  3,1
  220.       PRINT "41. Field used to identify users ----------------- " + HASH.ID$
  221.       PRINT "42. Field used to distinguish users with same ID-- " + INDIV.ID$
  222.       PRINT "43. Start position identifying personal downloads-"  + STR$(PERSONAL.BEGIN)
  223.       PRINT "44. Field length to identify personal downloads --"  + STR$(PERSONAL.LEN)
  224.       PRINT "45. Prompt for first part of personal identifier - " + FIRST.NAME.PROMPT$
  225.       PRINT "46. Prompt for last part of personal identifier -- " + LAST.NAME.PROMPT$
  226.       PRINT "47. Enforce upload/download ratios --------------- " + FNYESNO$(ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  227.       PRINT "48. RESTRICT users by SUBSCRIPTION date ---------- " + FNYESNO$(RESTRICT.BY.DATE)
  228.       PRINT "49. Security level when SUBSCRIPTION expires -----"  + STR$(EXPIRED.SECURITY)
  229.       PRINT "50. Days before expiration to warn callers -------"  + STR$(DAYS.TO.WARN)
  230.       PRINT "51. Default # days in SUBSCRIPTION PERIOD --------"  + STR$(DAYS.IN.SUBSCRIPTION.PERIOD)
  231.       PRINT "52. Turn printer off after each recycle ---------- " + FNYESNO$(TURN.PRINTER.OFF)
  232.       PRINT "53. Play musical themes for RBBS-PC functions----- " + FNYESNO$(MUSIC)
  233.       PRINT "54. BUFFER SIZE used when displaying text files --" + STR$(BUFFER.SIZE)
  234.       PRINT "55. Stack space to be made available -------------" + STR$(SIZE.OF.STACK)
  235.       PRINT "56. File shown users when SYSOP wants system next  " + NOT.YET.IN$ ' F7.MESSAGE$
  236.       PRINT "57. Ask users their (What is your ...) ----------- " + USER.LOCATION$
  237.       PRINT "58. Show ALL DIRECTORIES in order in dir of dir -- " + FNYESNO$(USE.DIR.ORDER)
  238.       PRINT "59. BUFFER SIZE for writes on internal protocols -" + STR$(WRITE.BUF.DEF)
  239.       PRINT "60. Voice Synthesizer support -------------------- " + VOICE.TYPE$
  240.       GOTO 12580
  241. 12390 DISPLAYED.PAGE.NUMBER = 4
  242.       GOSUB 24800
  243.       LOCATE  3,1
  244.       PRINT "61. Drive and file describing 'bulletins' is ----- " + DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
  245.       PRINT "62. Number of active 'bulletins' -----------------" + STR$(ACTIVE.BULLETINS)
  246.       PRINT "63. Prefix used to name bulletin files is -------- " + BULLETIN.PREFIX$
  247.       PRINT "64. Drive and path (optional) for 'help' files --- " + HELP.PATH$
  248.       PRINT "65. Prefix used to name three major 'help' files - " + HELP.FILE.PREFIX$
  249.       PRINT "66. Extension for help files of individual cmds -- " + HELP.EXTENSION$
  250.       PRINT "67. HELP file when callers CATEGORIZE uploads ---- " + UPCAT.HELP$
  251.       PRINT "68. Name of 'newuser' file shown to new users ---- " + NEWUSER.FILE$
  252.       PRINT "69. Name of 'welcome' file shown at logon -------- " + WELCOME.FILE$
  253.       PRINT "70. The SYSOP's command menu is named ------------ " + MENU$(1)
  254.       PRINT "71. The MAIN system menu is named ---------------- " + MENU$(2)
  255.       PRINT "72. The file subsystem menu is named ------------- " + MENU$(3)
  256.       PRINT "73. The utilities subsystem menu is named -------- " + MENU$(4)
  257.       PRINT "74. Menu that lists available conferences is ----- " + CONFERENCE.MENU$
  258.       PRINT "75. Menu that lists questionnaires available is -- " + ANS.MENU$
  259.       PRINT "76. Drive/path for optional questionnaires ------- " + QUES.PATH$
  260.       PRINT "77. File with main SYSOP-supplied user interface - " + MAIN.PUI$
  261.       PRINT "78. Allow menus to pause in the middle ----------- " + FNYESNO$(MENUS.CAN.PAUSE)
  262.       PRINT "79. Drive/path where macro files are stored ------ " + MACRO.DRVPATH$
  263.       IF MACRO.EXTENSION$ = "" THEN _
  264.          X$ = NONE.PICKED$ _
  265.       ELSE X$ = MACRO.EXTENSION$
  266.       PRINT "80. Extension of macro files --------------------- " ; X$
  267.       GOTO 12580
  268. 12400 DISPLAYED.PAGE.NUMBER = 5
  269.       GOSUB 24800
  270.       LOCATE  3,1
  271.       PRINT " 81. File containing invalid user names ----------- " + TRASHCAN.FILE$
  272.       PRINT " 82. Name questionnaire required of ALL callers --- " + REQUIRED.QUESTIONNAIRE$
  273.       PRINT " 83. Name of 'pre-log' file ----------------------- " + PRELOG$
  274.       PRINT " 84. Name of questionnaire required of new users -- " + NEW.USER.QUESTIONNAIRE$
  275.       PRINT " 85. Name of 'epi-log' questionnaire -------------- " + EPILOG$
  276.       PRINT " 86. System file containing messages is named ----- " + MAIN.MESSAGE.FILE$
  277.       PRINT " 87. System file for recording users is named ----- " + MAIN.USER.FILE$
  278.       PRINT " 88. System file for comments to SYSOP is named --- " + COMMENTS.FILE$
  279.       PRINT " 89. Record comments as private messages ---------- " ; FNYESNO$(COMMENTS.AS.MESSAGES)
  280.       PRINT " 90. System file for 'callers' is named ----------- " + CALLERS.FILE$
  281.       PRINT " 91. Extended logging to 'callers' file ----------- " ; FNYESNO$(EXTENDED.LOGGING)
  282.       PRINT " 92. Wrap-around the 'callers' file --------------- " + NOT.YET.IN$ ' WRAP.CALLERS.FILE$
  283.       PRINT " 93. File controlling scan for mail waiting ------- " + CONFMAIL.LIST$
  284.       PRINT " 94. Max # of work variables in ques/macros -------"  ; STR$(MAX.WORK.VAR)
  285.       PRINT " 95. Prevent callers from quoting in a reply ------ " ; FNYESNO$(ZNoQuoting)
  286.       GOTO 12580
  287. 12410 DISPLAYED.PAGE.NUMBER = 6
  288.       GOSUB 24800
  289.       LOCATE  3,1
  290.       PRINT "101. Is the 'door' subystem available? ------------ " ; FNYESNO$(DOORS.AVAILABLE)
  291.       PRINT "102. The 'door' subsystem menu is named ----------- " + MENU$(5)
  292.       PRINT "103. File built dynamically to open a 'door' ------ " + RCTTY.BAT$
  293.       PRINT "104. When a 'door' closes, re-invoke RBBS-PC via -- " + RBBS.BAT$
  294.       PRINT "105. Drive/path to look for COMMAND.COM on -------- " + DISK.FOR.DOS$
  295.       PRINT "106. Use the Dos 'CTTY' command to redirect I/O --- " ; FNYESNO$(REDIRECT.IO.METHOD)
  296.       PRINT "107. Door Program to check users at logon --------- " ; REGISTRATION.PROGRAM$
  297.       PRINT "108. Logon door required of new users & security <="  ; STR$(MAX.REG.SEC)
  298.       PRINT "109. Name of control file for doors --------------- " ; DOORS.DEF$
  299.       GOTO 12580
  300. 12420 DISPLAYED.PAGE.NUMBER = 7
  301.       GOSUB 24800
  302.       LOCATE  3,1
  303.       PRINT "121. Pseudonym to sign on remotely as the SYSOP ---- " + MN1$+ " " +MN2$
  304.       PRINT "122. ESC key logs SYSOP on locally without password- " + FNYESNO$(ESCAPE.INSECURE)
  305.       PRINT "123. Minimum security level to log on RBBS-PC ------" + STR$(MINIMUM.LOGON.SECURITY)
  306.       PRINT "124. Default security level for new callers --------" + STR$(DEFAULT.SECURITY.LEVEL)
  307.       PRINT "125. Security level for SYSOP ----------------------" + STR$(SYSOP.SECURITY.LEVEL)
  308.       PRINT "126. Minimum security level to see SYSOP's menu ----" + STR$(SYSOP.MENU.SECURITY.LEVEL)
  309.       PRINT "127. Minimum security to leave extended description-" + STR$(ASK.EXTENDED.DESC)
  310.       PRINT "128. Max # security violations before disconnect ---" + STR$(MAXIMUM.VIOLATIONS)
  311.       M22$ = STR$(SYSOP.FUNCTION(1))
  312.       IX = SYSOP.FUNCTION(1)
  313.       FOR I = 2 TO NUM.SYSOP
  314.         IF IX <> SYSOP.FUNCTION(I) THEN _
  315.            M22$ = "(Variable)" : _
  316.            GOTO 12430
  317.       NEXT
  318. 12430 PRINT "129. Security level for SYSOP functions ------------" + M22$
  319.       M23$ = STR$(MAIN.FUNCTION(1))
  320.       IX = MAIN.FUNCTION(1)
  321.       FOR I = 2 TO NUM.MAIN
  322.         IF IX<>MAIN.FUNCTION(I) THEN _
  323.            M23$ = "(Variable)" : _
  324.            GOTO 12440
  325.       NEXT
  326. 12440 PRINT "130. Security level for main menu functions --------" + M23$
  327.       M24$ = STR$(FILES.FUNCTION(1))
  328.       IX = FILES.FUNCTION(1)
  329.       FOR I = 2 TO NUM.FILES
  330.         IF IX<>FILES.FUNCTION(I) THEN _
  331.            M24$ = "(Variable)" : _
  332.            GOTO 12450
  333.       NEXT
  334. 12450 PRINT "131. Security level for file menu functions --------" + M24$
  335.       M25$ = STR$(UTILITY.FUNCTION(1))
  336.       IX = UTILITY.FUNCTION(1)
  337.       FOR I = 2 TO NUM.UTILITY
  338.         IF IX<>UTILITY.FUNCTION(I) THEN _
  339.            M25$ = "(Variable)" : _
  340.            GOTO 12460
  341.       NEXT
  342. 12460 PRINT "132. Security level for utilities menu functions ---" + M25$
  343.       M26$ = STR$(GLOBAL.FUNCTION(1))
  344.       IX = GLOBAL.FUNCTION(1)
  345.       FOR I = 1 TO NUM.GLOBAL
  346.         IF IX<>GLOBAL.FUNCTION(I) THEN _
  347.            M26$ = "(Variable)" : _
  348.            GOTO 12465
  349.       NEXT
  350. 12465 PRINT "133. Security level for GLOBAL commands ------------" + M26$
  351.       PRINT "134. Max # of password changes in a session --------" + STR$(MAXIMUM.PASSWORD.CHANGES)
  352.       PRINT "135. Minimum security for temp. password changes ---" + STR$(MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  353.       PRINT "136. Minimum security to overwrite on uploads ------" + STR$(OVERWRITE.SECURITY.LEVEL)
  354.       PRINT "137. User's security exempted from 'packing' -------" + STR$(SEC.LVL.EXEMPT.FRM.PURGING)
  355.       PRINT "138. Default security to read new PRIVATE messages -"  + STR$(PRIVATE.READ.SEC)
  356.       PRINT "139. Default security to read new PUBLIC messages --"  + STR$(PUBLIC.READ.SEC)
  357.       PRINT "140. Minimum security to change msg.'s security ----"  + STR$(SEC.CHANGE.MSG)
  358.       GOTO 12580
  359. 12466 DISPLAYED.PAGE.NUMBER = 8
  360.       GOSUB 24800
  361.       LOCATE  3,1
  362.       PRINT "141. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
  363.       PRINT "142. Drive/path where personal files & dir stored - " + PERSONAL.DRVPATH$
  364.       PRINT "143. Name of Personal Directory ------------------- " + PERSONAL.DIR$
  365.       PRINT "144. Protocol required for personal downloads ----- " + MID$("<other><none> Ascii  XMODEM Xm/CRC Kermit Ymodem Imodem YmodemGWxmodem", 7 * INSTR("NAXCKYIGW",PERSONAL.PROTOCOL$) + 1,7)  ' EC060601
  366.       PRINT "145. Files with download security are listed in --- " + FILESEC.FILE$
  367.       PRINT "146. File name with privileged group passwords is - " + PASSWORD.FILE$
  368.       PRINT "147. Concatenate multi-file ASCII downloads ------- " + FNYESNO$(PERSONAL.CONCAT)
  369.       PRINT "148. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
  370.       PRINT "149. Min security level to view new uploads -------" + STR$(MIN.SEC.TO.VIEW)
  371.       PRINT "150. Security level exempt from 'epi-log' file ----" + STR$(SECURITY.EXEMPT.FROM.EPILOG)
  372.       PRINT "151. Min. security to 'AUTO ADD' conference user -- " + AUTO.ADD.SECURITY$
  373.       PRINT "152. Min. security for old caller to turbo logon --" + STR$(ALLOW.CALLER.TURBO)
  374.       PRINT "153. Min. security to describe an existing file ---" + STR$(ADD.DIR.SECURITY)
  375.       PRINT "154. Help file to display for a security violation- " + SECVIO.HLP$
  376.       TIME.LOCK$ = MID$("<none> DOORS  DOWNLDSBOTH   ",TIME.LOCK*7+1,7)
  377.       PRINT "155. Time lock on DOORS and DOWNLOADS ------------- "; TIME.LOCK$
  378.       PRINT "156. Min. sec level exempt from auto-update of sec-" ; AUTO.UPGRADE.SEC
  379.       PRINT "157. Min security to READ & KILL all messages -----" ; SEC.KILL.ANY
  380.       PRINT "158. Do not display lines in msgs beginning with -- "; SCREEN.OUT.MSG$
  381.       GOTO 12580
  382. 12470 DISPLAYED.PAGE.NUMBER = 9
  383.       GOSUB 30040
  384.       ' MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  385.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  386.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  387.       GOSUB 24800
  388.       LOCATE  3,1
  389.       PRINT "161. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  390.       MT$ = "single RBBS-PC copy "
  391.       IF MAXIMUM.NUMBER.OF.NODES <> 1 THEN _
  392.          MT$ = "concurrent RBBS-PC's" : _
  393.          SUBROUTINE.PARAMETER = 2 : _
  394.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  395.             SUBROUTINE.PARAMETER = 1 : _
  396.             CALL NETTYPE : _
  397.          ELSE CALL NETTYPE
  398.       IF NETWORK.TYPE = 6 THEN _
  399.          MT$ = "NETBIOS             "
  400.       IF NETWORK.TYPE = 7 THEN _
  401.          MT$ = "DoubleDOS           "
  402.       PRINT "162. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  403.       PRINT "163. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  404.       FILE$ = MAIN.MESSAGE.FILE$
  405.       GOSUB 30180
  406.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  407.       IF CONFERENCE.MODE <> 1 THEN _
  408.          X$ = "MAIN" _
  409.       ELSE X$ = ZConfName$
  410.       PRINT "164. Number of records in " ;X$;" User File ";STRING$(15-LEN(X$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF) ' KG062302
  411.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  412.          X$ = "MAIN" _
  413.       ELSE X$ = ZConfName$
  414.       PRINT "165. Number of records in " ;X$;" Message File ";STRING$(12-LEN(X$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!) ' KG062302
  415.       PRINT "166. Maximum number of messages allowed ------------" ; STR$(MAX.ALLOWED.MSGS.FRM.DEF)
  416.       PRINT "167. Conference File Maintenance."
  417.       IF DEFAULT.EXTENSION$ = "" THEN _
  418.          X$ = NONE.PICKED$ _
  419.       ELSE X$ = DEFAULT.EXTENSION$
  420.       PRINT "168. Default extension for compressed files -------- " ; X$
  421.       PRINT "169. Additional extensions for compressed files ---- " ; COMPRESSED.EXT$
  422.       PRINT "170. Message file GROWS in size as messages added -- " ; FNYESNO$(MESSAGES.CAN.GROW)
  423.       GOTO 12580
  424. 12480 DISPLAYED.PAGE.NUMBER = 10
  425.       GOSUB 24800
  426.       RB = 0
  427.       LOCATE  3,1
  428.       PRINT "181. Pack " + MAIN.MESSAGE.FILE$ + " file.
  429.       PRINT "182. Rebuild " + MAIN.USER.FILE$ + " file.
  430.       PRINT "183. Print " + MAIN.MESSAGE.FILE$ + " 'header' records.
  431.       PRINT "184. Renumber messages in " + MAIN.MESSAGE.FILE$ + " file.
  432.       PRINT "185. Repair messages in " + MAIN.MESSAGE.FILE$ + " file.
  433.       PRINT "186. Make all users answer required questionnaire."
  434.       PRINT "187. Check FMS directory structure."
  435.       PRINT "188. Check Personal Download directory structure."
  436.       PRINT "189. Set most critical parameters."
  437.       PRINT "190. Set parameters new to RBBS-PC " + CONFIG.VERSION$
  438.       PRINT "191. Reset active printers for all nodes."
  439.       PRINT "192. Make user pref. on hilighting match color graphics."
  440.       GOTO 12580
  441. 12490 DISPLAYED.PAGE.NUMBER = 11
  442.       GOSUB 24800
  443.       LOCATE  3,1
  444.       PRINT "201. Drive available for uploading files to ------- " + DRIVE.FOR.UPLOADS$ + ":"
  445.       PRINT "202. File name of Upload Directory  --------------- " + UPLOAD.DIRECTORY$
  446.       PRINT "203. Drive/path where Upload Directory stored ----- " + UPLOAD.PATH$
  447.       PRINT "204. Drive(s) available for Downloading ----------- " + DRIVES.FOR.DOWNLOADS$
  448.       PRINT "205. Will you be using DOS sub-directories? ------- " ; FNYESNO$(WILL.SUBDIRS.B.USED)
  449.       PRINT "206. Write Uploads to a DOS sub-directory? -------- " + FNYESNO$(UPLOAD.TO.SUBDIR)
  450.       PRINT "207. Are downloads from DOS sub-directories? ------ " + FNYESNO$(DOWNLOAD.TO.SUBDIR)
  451.       PRINT "208. List, change, add, delete sub-directories."
  452.       PRINT "209. Extension for file directories --------------- " + DIRECTORY.EXTENTION$
  453.       X$ = ALTDIR.EXTENSION$
  454.       IF ALTDIR.EXTENSION$ = "" OR _
  455.          ALTDIR.EXTENSION$ = "<none>" THEN _
  456.          X$ = NONE.PICKED$
  457.       PRINT "210. Alternate extension for directory files ------ " + X$
  458.       PRINT "211. Name (prefix) of directory of directories ---- " + DIRECTORY.PREFIX$
  459.       PRINT "212. Omit directory of directories in N)ew cmnd. -- " + OMIT.MAIN.DIRECTORY$
  460.       X$ = ALWAYS.STREW.TO$
  461.       IF ALWAYS.STREW.TO$ = "" OR _
  462.          ALWAYS.STREW.TO$ = "<none>" THEN _
  463.          X$ = "NO"
  464.       PRINT "213. Copy all upload descriptions to -------------- " + X$
  465.       A$ = FMS.DIRECTORY$
  466.       IF FMS.DIRECTORY$ = "" THEN _
  467.          A$ = NONE.PICKED$
  468.       PRINT "214. Name of master File Management System dir is - " + A$
  469.       PRINT "215. Limit file searches to master FMS dir only --- " ; FNYESNO$(LIMIT.SEARCH.TO.FMS)
  470.       PRINT "216. Default category code for uploads ------------ " + DEFAULT.CATEGORY.CODE$
  471.       PRINT "217. File containing valid directory categories --- " + DIR.CATEGORY.FILE$
  472.       X$ = MASTER.DIRECTORY.NAME$
  473.       IF MASTER.DIRECTORY.NAME$ = "" THEN _
  474.          X$ = "NO"
  475.       PRINT "218. Limit search for 'ALL' dirs to directory ----- " + X$
  476.       PRINT "219. Max length of description of uploaded file ---" + STR$(MAX.DESC.LEN)
  477.       PRINT "220. Drive/path(optional) for directory files ----- " + DIRECTORY.PATH$
  478.       GOTO 12580
  479. 12500 DISPLAYED.PAGE.NUMBER = 12
  480.       GOSUB 24800
  481.       LOCATE 3,1
  482.       PRINT "221. Communications port to be used by RBBS-PC ---- " + COM.PORT$
  483.       PRINT "222. # of seconds to wait for modem to initialize -" + STR$(MODEM.INIT.WAIT.TIME)
  484.       PRINT "223. Seconds to wait before issuing modem commands-" + STR$(MODEM.COMMAND.DELAY.TIME)
  485.       PRINT "224. Number of rings to wait before answering -----" + STR$(REQUIRED.RINGS);
  486.       IF INSTR(USER.INIT.COMMAND$, "S0=255") > 0 THEN _
  487.          PRINT " RING BACK";
  488.       PRINT
  489.       PRINT "225. Set the modem commands"
  490.       PRINT "226. ---------------------------------------------- "
  491.       PRINT "227. Issue modem commands between rings ----------- " ; FNYESNO$(COMMANDS.BETWEEN.RINGS)
  492.       PRINT "228. BPS rate to initially open modem at ---------- " + MODEM.INIT.BAUD$
  493.       X$ = STR$(WAIT.BEFORE.DISCONNECT) + " seconds"
  494.       IF WAIT.BEFORE.DISCONNECT = 0 THEN _
  495.          X$ = "NO"
  496.       PRINT "229. Log off user who are idle for ----------------" + X$
  497.       PRINT "230. Are you using a 'DUMB' auto-answer modem? ---- " ; FNYESNO$(DUMB.MODEM)
  498.       PRINT "231. Initialize modem firmware for RBBS-PC."
  499.       PRINT "232. # seconds to wait after dropping DTR ---------"  + STR$(DTR.DROP.DELAY)
  500.       PRINT "233. File with PROTOCOL definitions --------------- " + PROTO.DEF$
  501.       PRINT "234. Always check caller for AUTODOWNLOAD support - " ; FNYESNO$(ASK.IDENTITY)
  502.       PRINT "235. Require non-ascii protocol for BASIC files --- " ; FNYESNO$(REQUIRE.NON.ASCII)
  503.       X$ = STR$(RECYCLE.WAIT) + " minutes"
  504.       IF RECYCLE.WAIT = 0 THEN _
  505.          X$ = "<Don't recycle>"
  506.       PRINT "236. Recycle if no calls are received within ------" + X$
  507.       PRINT "237. Leave modem at initial baud ------------------ " + FNYESNO$(KEEP.INIT.BAUD)
  508.       GOTO 12580
  509. 12505 DISPLAYED.PAGE.NUMBER = 13
  510.       GOSUB 24800
  511.       LOCATE 3,1
  512.       PRINT "241. Restore initial parms. after change to N/8/1 - " + FNYESNO$(SWITCH.BACK)
  513.       PRINT "242. Minimum BPS rate required of new callers -----"  + STR$(MIN.NEWCALLER.BAUD)
  514.       PRINT "243. Minimum BPS rate required of old callers -----"  + STR$(MIN.OLDCALLER.BAUD)
  515.       PRINT "244. Modem flow control uses Clear-to-Send (CTS)--- " + RTS$
  516.       PRINT "245. Modem flow control uses XON/XOFF ------------- " + FNYESNO$(XON.XOFF)
  517.       PRINT "246. Seconds to wait for carrier after answering --"  + STR$(MAX.CARRIER.WAIT)
  518.       GOTO 12580
  519. 12510 DISPLAYED.PAGE.NUMBER = 14
  520.       GOSUB 24800
  521.       LOCATE 3,1
  522.       IF TIME.TO.DROP.TO.DOS < 1 THEN _
  523.          TIME.TO.DROP.TO.DOS$ = NONE.PICKED$ _
  524.       ELSE TIME.TO.DROP.TO.DOS$ = STRING$(4 - (LEN(STR$(TIME.TO.DROP.TO.DOS)) - 1),"0") + MID$(STR$(TIME.TO.DROP.TO.DOS),2) ' KG080301
  525. 12512 PRINT "261. Time of day to exit to DOS ------------------- " + TIME.TO.DROP.TO.DOS$
  526.       PRINT "262. Net mail to invoke is ------------------------ " + NET.MAIL$
  527.       X$ = HOST.ECHO.ON$
  528.       IF HOST.ECHO.ON$ = "" THEN _
  529.          X$ = NONE.PICKED$
  530.       PRINT "263. Command for intermediate host to ECHO -------- " + X$
  531.       X$ = HOST.ECHO.OFF$
  532.       IF HOST.ECHO.OFF$ = "" THEN _
  533.          X$ = NONE.PICKED$
  534.       PRINT "264. Command for intermediate host NOT to ECHO ---- " + X$
  535.       X = INSTR("ICR",DEFAULT.ECHOER$)
  536.       X$ = MID$("Intermediate hostCaller's softwareRBBS-PC",1 + 17 * (X - 1),17)
  537.       PRINT "265. Who echos what a remote caller types? -------- " + X$
  538.       X$ = DEFAULT.LINE.ACK$
  539.       IF DEFAULT.LINE.ACK$ = "" THEN _
  540.          X$ = NONE.PICKED$
  541.       PRINT "266. String to acknowlege line in ASCII upload ---- "+ X$
  542.       PRINT "267. Name of sorted file list used in up/download = "; FAST.FILE.LIST$
  543.       PRINT "268. Name of locator file used in up/download ----- "; FAST.FILE.LOCATOR$
  544.       GOTO 12580
  545. 12520 DISPLAYED.PAGE.NUMBER = 15
  546.       GOSUB 24800
  547.       LOCATE  3,1
  548.       PRINT "281. Let new users set their preferences --------- " ; FNYESNO$(NEWUSER.SETS.DEFAULTS)
  549.       PRINT "282. New users default sign-on mode -------------- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.MODE$
  550.       PRINT "283. New users default file-transfer protocol ---- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.PROTOCOL$
  551.       PRINT "284. Line feeds for new users default to --------- " + NOT.YET.IN$ ' NEW.USER.LINE.FEEDS$
  552.       PRINT "285. Nulls for new users default to -------------- " + NOT.YET.IN$ ' NEW.USER.NULLS$
  553.       PRINT "286. Prompt bell for new users defaults to ------- " + NOT.YET.IN$ ' NEW.USER.BELL$
  554.       PRINT "287. New users 'graphics' capability is assumed -- " + NOT.YET.IN$ ' NEW.USER.GRAPHICS$
  555.       PRINT "288. New users are assumed UPPERCASE only -------- " + NOT.YET.IN$ ' NEW.USER.CASE$
  556.       PRINT "289. New users message margins defaults to ------- " + NOT.YET.IN$ ' STR$(NEW.USER.MARGINS)
  557.       PRINT "290. Add new users to USERS file ----------------- " ; FNYESNO$(REMEMBER.NEW.USERS)
  558.       PRINT "291. Let new users on even when USERS file full -- " ; FNYESNO$(SURVIVE.NOUSER.ROOM)
  559.       GOTO 12580
  560. 12530 DISPLAYED.PAGE.NUMBER = 16
  561.       GOSUB 24800
  562.       LOCATE  3,1
  563.       X$ = LIBRARY.DRIVE$
  564.       IF LIBRARY.DRIVE$ = "" THEN _
  565.          X$ = NONE.PICKED$
  566.       PRINT "301. Library drive ------------------------------- " + X$
  567.       PRINT "302. Drive/Path for Library directory ------------ " + LIBRARY.DIRECTORY.PATH$
  568.       PRINT "303. Extension for Library directory ------------- " + LIBRARY.DIRECTORY.EXTENTION$
  569.       PRINT "304. Drive/Path for Library work/RAM disk -------- " + LIBRARY.WORK.DISK.PATH$
  570.       PRINT "305. # of disks in Library -----------------------" + STR$(LIBRARY.MAX.DISK)
  571.       PRINT "306. # of master Library subdirectories ----------" + STR$(LIBRARY.MAX.DIRECTORY)
  572.       PRINT "307. # of subdirectories in each master ----------" + STR$(LIBRARY.MAX.SUBDIR)
  573.       PRINT "308. Prefix of Library subdirectories ------------ " + LIBRARY.SUBDIR.PREFIX$
  574.       PRINT "309. Name of Library subsystem command menu ------ " + MENU$(6)
  575.       PRINT "310. Symbols to use for Library menu commands ---- " + LIBRARY.COMMANDS$
  576.       M27$ = STR$(PS)
  577.       IX = LIBRARY.FUNCTION(1)
  578.       FOR I = 1 TO NUM.LIBRARY
  579.          IF IX<>LIBRARY.FUNCTION(I) THEN _
  580.             M27$ = "(Variable)" : _
  581.             GOTO 12531
  582.       NEXT
  583. 12531 PRINT "311. Security level for Library menu functions --- " + M27$
  584.       PRINT "312. Drive/Path of archive utility --------------- " + LIBRARY.ARCHIVE.PATH$
  585.       PRINT "313. Name of executable archive utility ---------- " + LIBRARY.ARCHIVE.PROGRAM$
  586.       GOTO 12580
  587. 12540 DISPLAYED.PAGE.NUMBER = 17
  588.       GOSUB 24800
  589.       LOCATE  3,1
  590.       X$ = EMPHASIZE.ON.DEF$
  591.       IF EMPHASIZE.ON.DEF$ = "" THEN _
  592.          X$ = NONE.PICKED$
  593.       PRINT "321. String to turn ON Graphic Emphasis ----------- " + X$
  594.       X$ = EMPHASIZE.OFF.DEF$
  595.       IF EMPHASIZE.OFF.DEF$ = "" THEN _
  596.          X$ = NONE.PICKED$
  597.       PRINT "322. String to restore normal text (Emphasis OFF) - " + X$
  598.       PRINT "323. Caller's Foreground color 1 ------------------ " + FG.1.DEF$
  599.       PRINT "324. Caller's Foreground color 2 ------------------ " + FG.2.DEF$
  600.       PRINT "325. Caller's Foreground color 3 ------------------ " + FG.3.DEF$
  601.       PRINT "326. Caller's Foreground color 4 ------------------ " + FG.4.DEF$
  602.       X$ = MID$("<none>Blue  Green Cyan  Red   PurpleYellowWhite",CALLER.BKGRD*6+1,6)
  603.       PRINT "327. Caller's Background color -------------------- " ; X$
  604.       GOTO 12580
  605. 12550 DISPLAYED.PAGE.NUMBER = 18
  606.       GOSUB 24800
  607.       GOTO 12580
  608. 12580 IF PRE.DISPLAY THEN _
  609.          PRE.DISPLAY = FALSE : _
  610.          GOTO 12622
  611.       GOSUB 24890
  612. 12590 GOSUB 22160
  613. 12592 IF IX THEN _            'IX       Key    Where to branch to
  614.          ON IX GOTO 12360, _  ' 1       F1 - Global Parameters (Part 1)
  615.                     12370, _  ' 2       F2 - Global Parameters (Part 2)
  616.                     12380, _  ' 3       F3 - Global Parameters (Part 3)
  617.                     12390, _  ' 4       F4 - RBBS-PC System Files (Part 1)
  618.                     12400, _  ' 5       F5 - RBBS-PC System Files (Part 2)
  619.                     12410, _  ' 6       F6 - RBBS-PC "doors"
  620.                     12420, _  ' 7       F7 - RBBS-PC security parms. (Part 1)
  621.                     12466, _  ' 8       F8 - RBBS-PC security parms. (Part 2)
  622.                     12470, _  ' 9       F9 - Multiple RBBS-PC parameters
  623.                     12480, _  '10      F10 - RBBS-PC's utilities
  624.                     12490, _  '11 Shift-F1 - RBBS-PC File Manager
  625.                     12500, _  '12 Shift-F2 - RBBS-PC comm. parameters (Part 1)
  626.                     12505, _  '13 Shift-F3 - RBBS-PC comm. parameters (Part 2)
  627.                     12510, _  '14 Shift-F4 - RBBS-PC Net Mail
  628.                     12520, _  '15 Shift-F5 - New user parameters
  629.                     12530, _  '16 Shift-F6 - Library parameters
  630.                     12540, _  '17 Shift-F7 - RBBS-PC Color parameters
  631.                     12310, _  '18 Shift-F8 - Reserved for future use
  632.                     12340, _  '19     PgUp - Go to previous page
  633.                     12330, _  '20     PgDn - Go to next page
  634.                     12630, _  '21      End - Terminate CONFIG
  635.                     12620     '22 Enter - Option selected followed by "enter"
  636.       GOTO 12590
  637. 12620 GOSUB 50340
  638.       IF VAL(HJ$) < 1 OR VAL(HJ$) > 331 THEN _
  639.          GOTO 12580
  640.       IPAGE = INT((VAL(HJ$) - 1) / 20)
  641.       IF DISPLAYED.PAGE.NUMBER <> IPAGE+1 THEN _
  642.          PRE.DISPLAY = TRUE : _
  643.          IX = IPAGE+1 : _
  644.          GOTO 12592
  645. 12622 ILOOKUP = VAL(HJ$) - (20 * IPAGE)
  646.       IPAGE = IPAGE + 1
  647.       IF ILOOKUP < 1 THEN _
  648.          ILOOKUP = 20 : _
  649.          IPAGE = IPAGE - 1
  650. 12630 EXIT SUB
  651. '
  652. ' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S
  653. ' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION.
  654. '
  655. 22160 I! = FRE(C$)
  656.       IX = 0
  657.       IF KSTACKED$ = "" THEN _
  658.          GOTO 22161
  659.       X = INSTR(KSTACKED$,CHR$(13))
  660.       IF X > 0 THEN _
  661.          IX = 22 : _
  662.          HJ$ = LEFT$(KSTACKED$,X-1) : _
  663.          KSTACKED$ = RIGHT$(KSTACKED$,LEN(KSTACKED$)-X) : _
  664.          OPTION$ = HJ$ : _
  665.          RETURN
  666.       Y$ = CHR$(0) + CHR$(68)
  667.       IF KSTACKED$ = "END" THEN _
  668.          Y$ = CHR$(0) + CHR$(79)
  669.       KSTACKED$ = ""
  670.       GOTO 22240
  671. 22161 Y$ = INKEY$
  672.       IF LEN(Y$) < 1 THEN _
  673.          GOTO 22161
  674.       IF LEN(Y$) = 2 THEN _               ' IF A FUNCTION KEY, BRANCH
  675.          GOTO 22240
  676.       IF ASC(Y$) = 13 THEN _              ' IF A CARRIAGE RETURN, RETURN
  677.          IX = 22 : _
  678.          RETURN
  679.       IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
  680.          HJ$ = LEFT$(HJ$,LEN(HJ$) - 1) : _
  681.          PRINT CHR$(29) + " " + CHR$(29); : _
  682.          GOTO 22161
  683.       IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
  684.          GOTO 22161
  685.       PRINT Y$;
  686.       HJ$ = HJ$ + _
  687.             Y$
  688.       OPTION$ = HJ$
  689.       IF LEN(HJ$) > 4 THEN _              ' IF MORE THAN FOUR CHARACTERS,
  690.          IX = 22                          ' RETURN
  691.       RETURN
  692. '
  693. ' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT
  694. ' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG
  695. '
  696. 22240 IX = ASC(RIGHT$(Y$,1))
  697.       IF IX < 59 OR IX > 91 THEN _        ' IGNORE IF NOT F1 THROUGH F10 OR
  698.          IX = 0: _                        ' SHIFT-F1 THROUGH SHIFT-F8
  699.          RETURN
  700.       IF IX = 73 THEN _                   ' IF PGUP THEN SET IX = 19
  701.          IX = 19 : _
  702.          RETURN
  703.       IF IX = 79 THEN _                   ' IF END THEN SET IX = 21
  704.          IX = 21 : _
  705.          RETURN
  706.       IF IX = 81 THEN _                   ' IF PGDN THEN SET IX = 20
  707.          IX = 20 : _
  708.          RETURN
  709.       IF (IX-58) < 11 THEN _              ' IF F1 THROUGH F10 SET IX = 1
  710.          IX = IX - 58 : _                 ' THROUGH 10 ACCORDINGLY.
  711.          RETURN
  712.       IF (IX-73) > 10 AND _               ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
  713.          (IX-73) < 19 THEN _              ' SET IX = 11 THROUGH 18
  714.             IX = IX - 73 : _              ' ACCORDINGLY.
  715.             RETURN
  716.       IX = 0
  717.       RETURN
  718. '
  719. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  720. '
  721. 24800 CLS
  722.       I! = FRE(C$)
  723.       COLOR 0,7,0
  724.       LOCATE 1,10
  725.       PRINT "RBBS-PC " + CONFIG.VERSION$ + " Configuration ";
  726.       IF CONFERENCE.MODE THEN _
  727.          GOSUB 24970
  728.       COLOR FG,BG,BORDER
  729.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  730.       RETURN
  731. 24890 A$ = "Enter parameter # to change, END to update, PgUp/PgDn to scroll:"
  732. 24900 LOCATE 24,5
  733.       PRINT A$;
  734.       X = POS(0) + 2
  735.       PRINT STRING$((75 - LEN(A$)),32);
  736.       LOCATE 24,X
  737.       COLOR FG,BG,BORDER
  738.       HJ$ = "
  739.       I! = FRE(C$)
  740.       RETURN
  741. '
  742. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  743. '
  744. 24970 LOCATE 2,1
  745.       PRINT SPACE$(10)
  746.       LOCATE 2,10
  747.       PRINT "(Conference Maintenance Mode for " + _
  748.             ZConfName$ + _
  749.             ")";
  750.       RETURN
  751. '
  752. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  753. '
  754. 30040 IF NETWORK.TYPE = 6 THEN _
  755.          OPEN MAIN.MESSAGE.FILE$ FOR RANDOM SHARED AS #2 LEN=128 _
  756.       ELSE OPEN "R",2,MAIN.MESSAGE.FILE$,128
  757.       FIELD 2,128 AS RR$
  758.       GET 2,1
  759.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8  =  number of last message on system
  760.       FIRST.USER.RECORD = VAL(MID$(RR$,52,5))        ' 52- 56  =  first rec. of user file
  761.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61  =  next avail. user record
  762.       HIGHEST.USER.RECORD = VAL(MID$(RR$,62,5))      ' 62- 66  =  last rec. of user file
  763.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  764.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  765.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  766.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  767.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  768.       CLOSE 2
  769.       RETURN
  770. '
  771. ' * COMMON ROUTINE TO GET THE LENGTH OF A FILE
  772. '
  773. 30180 IF NETWORK.TYPE = 6 THEN _
  774.          OPEN FILE$ FOR RANDOM SHARED AS #2 LEN=128 _
  775.       ELSE OPEN "R",2,FILE$,128
  776.       FIELD 2,128 AS RR$
  777.       UG = LOF(2) / 128
  778.       CLOSE 2
  779.       RETURN
  780. '
  781. ' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24
  782. '
  783. 50340 I! = FRE(C$)
  784.       LOCATE 24,1
  785.       PRINT STRING$(79,32);
  786.       RETURN
  787. '
  788. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  789. '
  790. 50345 GOSUB 50340
  791.       LOCATE 24,5
  792.       PRINT XX$;
  793.       RETURN
  794. '
  795. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  796. '
  797. 60380 FOR I = 1 TO 3
  798.         BEEP
  799.       NEXT
  800.       RETURN
  801.       END SUB
  802. '  $SUBTITLE: 'NETTYPE - subroutine to select supported networks'
  803. '  $PAGE
  804. '
  805. '  SUBROUTINE NAME    --  NETTYPE
  806. '
  807. '  INPUT PARAMETERS   --  MLCOM
  808. '                         NETWORK.TYPE
  809. '                         NETWORK.TYPE$
  810. '                         SUBROUTINE.PARAMETER
  811. '
  812. '  OUTPUT PARAMETERS  --  MLCOM
  813. '                         NETWORK.TYPE
  814. '                         NETWORK.TYPE$
  815. '
  816. '  SUBROUTINE PURPOSE --  TO SELECT THE RBBS-PC SUPPORTED NETWORKS
  817. '
  818.       SUB NETTYPE STATIC
  819.       ON SUBROUTINE.PARAMETER GOTO 60382,60384
  820. 60382 CLS
  821.       LOCATE 3,1
  822.       PRINT "     RBBS-PC is supported in the following:"
  823.       PRINT "                   Environment"
  824.       PRINT "          0. Single RBBS-PC in an IBM DOS environment"
  825.       PRINT "          1. MultiLink (multi-tasking under single DOS)"
  826.       PRINT "          2. Omninet (CORVUS)"
  827.       PRINT "          3. PC-NET (Orchid)"
  828.       PRINT "          4. DESQview (Quarterdeck)"
  829.       PRINT "          5. 10 NET (Fox Research)"
  830.       PRINT "          6. NETBIOS (DOS SHARE)"
  831.       PRINT "          7. DoubleDOS, but file sharing not supported."
  832. 60383 XX$ = "Select environment (0 to 7, [ENTER] quits)"
  833.       I! = FRE(C$)
  834.       LOCATE 24,1
  835.       PRINT STRING$(79,32);
  836.       LOCATE 24,5
  837.       PRINT XX$;
  838.       LINE INPUT;X$
  839.       IF X$ = "" THEN _
  840.          EXIT SUB
  841.       NETWORK.TYPE = VAL(X$)
  842.       IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 7 THEN _
  843.          GOTO 60383
  844. 60384 IF NETWORK.TYPE = 0 THEN _
  845.          NETWORK.TYPE$ = "IBM's DOS"
  846.       IF NETWORK.TYPE = 1 THEN _
  847.          MLCOM = TRUE : _
  848.          NETWORK.TYPE$ = "MultiLink"
  849.       IF NETWORK.TYPE = 2 THEN _
  850.          NETWORK.TYPE$ = "Omninet"
  851.       IF NETWORK.TYPE = 3 THEN _
  852.          NETWORK.TYPE$ = "PC-NET"
  853.       IF NETWORK.TYPE = 4 THEN _
  854.          NETWORK.TYPE$ = "DESQview"
  855.       IF NETWORK.TYPE = 5 THEN _
  856.          NETWORK.TYPE$ = "10 NET"
  857.       IF NETWORK.TYPE = 6 THEN _
  858.          NETWORK.TYPE$ = "NETBIOS"
  859.       IF NETWORK.TYPE = 7 THEN _
  860.          NETWORK.TYPE$ = "No file sharing!"
  861.       IF SUBROUTINE.PARAMETER = 2 THEN _
  862.          EXIT SUB
  863.       IF NETWORK.TYPE = 2 OR NETWORK.TYPE = 3 OR NETWORK.TYPE = 5 OR NETWORK.TYPE = 6 THEN _
  864.          CALL GETNUMYN ("Are you running Multi-Link with " + NETWORK.TYPE$,MLCOM)
  865.       END SUB
  866. '  $SUBTITLE: 'CNFGINIT - subroutine to initialize CONFIG's constants'
  867. '  $PAGE
  868. '
  869. '  SUBROUTINE NAME    --  CNFGINIT
  870. '
  871. '  INPUT PARAMETERS   --  NONE
  872. '
  873. '  OUTPUT PARAMETERS  --  CONFIG'S CONSTANTS INITIALIZED
  874. '
  875. '  SUBROUTINE PURPOSE --  TO INITIALIZE THE CONSTANTS USED BY CONFIG
  876. '
  877. 60385 SUB CNFGINIT STATIC
  878. '
  879. ' * INITALIZE ALL VARIABLES IF A .DEF FILE DOESN'T AREADY EXIST
  880. '
  881.       D$ = DD$
  882.       DRV$ = LEFT$(D$,1)
  883.       FALSE                      = 0
  884.       TRUE                       = NOT FALSE
  885.       SYSOP.SECURITY.LEVEL       = 10
  886.       ACT.MNTHS.B4.DELETING      = 1
  887.       ACTIVE.BULLETINS           = 6
  888.       ADD.DIR.SECURITY           = SYSOP.SECURITY.LEVEL
  889.       ALLOW.CALLER.TURBO         = 6
  890.       ALTDIR.EXTENSION$          = ""
  891.       ALWAYS.STREW.TO$           = ""
  892.       ANS.MENU$                  = D$ + "MENUA"
  893.       ASK.EXTENDED.DESC          = SYSOP.SECURITY.LEVEL
  894.       ASK.IDENTITY               = FALSE
  895.       AUTO.ADD.SECURITY          = 5
  896.       AUTO.UPGRADE.SEC           = SYSOP.SECURITY.LEVEL
  897.       AUTOPAGE.DEF$              = D$ + "AUTOPAGE.DEF"
  898.       BG                         = 0
  899.       BORDER                     = 0
  900.       BUFFER.SIZE                = 128
  901.       BULLETIN.MENU$             = "BULLET"
  902.       BULLETIN.PREFIX$           = "BULLET"
  903.       BULLETINS.OPTIONAL         = TRUE
  904.       C$                         = ""
  905.       CALLER.BKGRD               = 0
  906.       CALLERS.FILE$              = D$ + "CALLERS"
  907.       SEC.KILL.ANY               = SYSOP.SECURITY.LEVEL
  908.       COM.PORT$                  = "COM1"
  909.       COMMANDS.BETWEEN.RINGS     = FALSE
  910.       COMMANDS.IN.PROMPT         = TRUE
  911.       COMMENTS.AS.MESSAGES       = FALSE
  912.       COMMENTS.FILE$             = D$ + "COMMENTS"
  913.       COMPRESSED.EXT$            = ".ARC.PAK"
  914.       COMPUTER.TYPE              = 0
  915.       CONFERENCE.MENU$           = D$ + "CONFENCE"
  916.       CONFERENCE.VIEWER.SEC.LVL  = 0
  917.       CONFMAIL.LIST$             = D$ + "CONFMAIL.DEF"
  918.       CONFIG.VERSION$            = "Version 17.3C"
  919.       DEFAULT.CATEGORY.CODE$     = "UNC"
  920.       DAYS.IN.SUBSCRIPTION.PERIOD = 365
  921.       DAYS.TO.WARN               = 60
  922.       DIR.CATEGORY.FILE$         = D$ + "DIR.CAT"
  923.       DIRECTORY.PREFIX$          = "DIR"
  924.       DEFAULT.ECHOER$            = "R"
  925.       DEFAULT.LINE.ACK$          = ""
  926.       DEFAULT.SECURITY.LEVEL     = 5
  927.       DIRECTORY.EXTENTION$       = "DIR"
  928.       DIRECTORY.PATH$            = D$
  929.       DISK.FOR.DOS$              = D$
  930.       DISKFULL.GO.OFFLINE        = TRUE
  931.       DNLD.SUB                   = 0
  932.       DOORS.AVAILABLE            = FALSE
  933.       DOORS.DEF$                 = D$ + "DOORS.DEF"
  934.       DOORS.TERMINAL.TYPE        = 8
  935.       DOSANSI                    = FALSE
  936.       DOS.VERSION                = 2
  937.       DOWNLOAD.DRIVES$           = DRV$ + DRV$
  938.       DOWNLOAD.TO.SUBDIR         = FALSE
  939.       DRIVE.FOR.BULLETINS$       = D$
  940.       DRIVE.FOR.HELP.FILES$      = D$
  941.       DTR.DROP.DELAY             = 3
  942.       DUMB.MODEM                 = FALSE
  943.       ECHOER$                    = "R"
  944.       EMPHASIZE.OFF.DEF$         = "[27]" + "[0;40;33m"
  945.       EMPHASIZE.ON.DEF$          = "[27]" + "[1;41;37m"
  946.       END.OFFICE.HOURS           = 2200
  947.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  948.       EPILOG$                    = D$ + "EPILOG.DEF"
  949.       ESCAPE.INSECURE            = FALSE
  950.       EXPERT.USER                = 0
  951.       EXPIRED.SECURITY           = DEFAULT.SECURITY.LEVEL
  952.       EXTENDED.LOGGING           = FALSE
  953.       EXTENSION.LIST$            = "ZIP"
  954.       FAST.FILE.LIST$            = D$ + "FIDX.DEF"
  955.       FAST.FILE.LOCATOR$         = D$ + "LIDX.DEF"
  956.       FC                         = 5
  957.       FG                         = 7
  958.       FG.1.DEF$                  = "Bright Green"
  959.       FG.2.DEF$                  = "Bright Yellow"
  960.       FG.3.DEF$                  = "Bright Purple"
  961.       FG.4.DEF$                  = "Bright Cyan"
  962.       FILE.COMMANDS.DEFAULTS$    = "DGLNPSUV"
  963.       FILE.COMMANDS$             = FILE.COMMANDS.DEFAULTS$
  964.       FILE.NOTIFY                = FALSE
  965.       FILES.FUNCTION$(1,1)       = "D)ownload a file      "
  966.       FILES.FUNCTION$(2,1)       = "G)oodbye              "
  967.       FILES.FUNCTION$(3,1)       = "L)ist file directory  "
  968.       FILES.FUNCTION$(4,1)       = "N)ew file search      "
  969.       FILES.FUNCTION$(5,1)       = "P)ersonal files       "
  970.       FILES.FUNCTION$(6,1)       = "S)earch files         "
  971.       FILES.FUNCTION$(7,1)       = "U)pload a file        "
  972.       FILES.FUNCTION$(8,1)       = "V)erbose archive list "
  973.       FILES.FUNCTION$(1,2)       = "D"
  974.       FILES.FUNCTION$(2,2)       = "G"
  975.       FILES.FUNCTION$(3,2)       = "L"
  976.       FILES.FUNCTION$(4,2)       = "N"
  977.       FILES.FUNCTION$(5,2)       = "P"
  978.       FILES.FUNCTION$(6,2)       = "S"
  979.       FILES.FUNCTION$(7,2)       = "U"
  980.       FILES.FUNCTION$(8,2)       = "V"
  981.       FILESEC.FILE$              = D$ + "FILESEC"
  982.       FIRST.NAME.PROMPT$         = "FIRST name"
  983.       FOSSIL                     = 0
  984.       GB                         = FC
  985.       GLOBAL.COMMANDS.DEFAULTS$  = "H?QX"
  986.       GLOBAL.COMMANDS$           = GLOBAL.COMMANDS.DEFAULTS$
  987.       GLOBAL.FUNCTION$(1,1)      = "H)elp on-line           "
  988.       GLOBAL.FUNCTION$(2,1)      = "?)help on-line (=H)     "
  989.       GLOBAL.FUNCTION$(3,1)      = "Q)uit this part         "
  990.       GLOBAL.FUNCTION$(4,1)      = "X)Expert toggle on/off  "
  991.       GLOBAL.FUNCTION$(1,2)      = "H"
  992.       GLOBAL.FUNCTION$(2,2)      = "?"
  993.       GLOBAL.FUNCTION$(3,2)      = "Q"
  994.       GLOBAL.FUNCTION$(4,2)      = "X"
  995.       GO.TO.SHELL                = TRUE
  996.       HELP$(3)                   = "HELP03"
  997.       HELP$(4)                   = "HELP04"
  998.       HELP$(7)                   = "HELP07"
  999.       HELP$(9)                   = "HELP09"
  1000.       HELP.EXTENSION$            = "HLP"
  1001.       HELP.FILE.PREFIX$          = "HELP0"
  1002.       HELP.PATH$                 = D$
  1003.       HOST.ECHO.OFF$             = ""
  1004.       HOST.ECHO.ON$              = ""
  1005.       IB                         = 0
  1006.       KEEP.INIT.BAUD             = FALSE
  1007.       KEEP.TIME.CREDITS          = FALSE
  1008.       LAST.NAME.PROMPT$          = "LAST name"
  1009.       LEN.HASH                   = 31
  1010.       LEN.INDIV                  = 0
  1011.       LIBRARY.ARCHIVE.PATH$        = D$
  1012.       LIBRARY.ARCHIVE.PROGRAM$     = "ARCA "
  1013.       LIBRARY.COMMANDS.DEFAULTS$   = "ACDGLSV"
  1014.       LIBRARY.COMMANDS$            = LIBRARY.COMMANDS.DEFAULTS$
  1015.       LIBRARY.DRIVE$               = ""
  1016.       LIBRARY.MAX.DISK             = 705
  1017.       LIBRARY.MAX.DIRECTORY        = 7
  1018.       LIBRARY.MAX.SUBDIR           = 100
  1019.       LIBRARY.SUBDIR.PREFIX$       = "DISK"
  1020.       LIBRARY.DIRECTORY.PATH$      = D$
  1021.       LIBRARY.DIRECTORY.EXTENTION$ = "CDR"
  1022.       LIBRARY.FUNCTION$(1,1)       = "A)rchive a Library disk  "
  1023.       LIBRARY.FUNCTION$(2,1)       = "C)hange Library disk     "
  1024.       LIBRARY.FUNCTION$(3,1)       = "D)ownload a file         "
  1025.       LIBRARY.FUNCTION$(4,1)       = "G)oodbye                 "
  1026.       LIBRARY.FUNCTION$(5,1)       = "L)ist a file directory   "
  1027.       LIBRARY.FUNCTION$(6,1)       = "S)earch files            "
  1028.       LIBRARY.FUNCTION$(7,1)       = "V)erbose archive list    "
  1029.       LIBRARY.FUNCTION$(1,2)       = "A"
  1030.       LIBRARY.FUNCTION$(2,2)       = "C"
  1031.       LIBRARY.FUNCTION$(3,2)       = "D"
  1032.       LIBRARY.FUNCTION$(4,2)       = "G"
  1033.       LIBRARY.FUNCTION$(5,2)       = "L"
  1034.       LIBRARY.FUNCTION$(6,2)       = "S"
  1035.       LIBRARY.FUNCTION$(7,2)       = "V"
  1036.       LIBRARY.WORK.DISK.PATH$      = D$
  1037.       LIMIT.SEARCH.TO.FMS        = FALSE
  1038.       LOGON.MAIL.LEVEL$          = "A"
  1039.       LSB                        = 1016
  1040. 60390 MACRO.DRVPATH$             = D$
  1041.       MACRO.EXTENSION$           = ""
  1042.       MAIN.COMMANDS.DEFAULTS$    = "ABCDEFIJKOPRSTUVW@"
  1043.       MAIN.COMMANDS$             = MAIN.COMMANDS.DEFAULTS$
  1044.       MAIN.FUNCTION$(1,1)        = "A)nswer questionnaire  "
  1045.       MAIN.FUNCTION$(2,1)        = "B)ulletins             "
  1046.       MAIN.FUNCTION$(3,1)        = "C)omments              "
  1047.       MAIN.FUNCTION$(4,1)        = "D)oor subsystem        "
  1048.       MAIN.FUNCTION$(5,1)        = "E)nter message         "
  1049.       MAIN.FUNCTION$(6,1)        = "F)iles subsystem       "
  1050.       MAIN.FUNCTION$(7,1)        = "I)nitial welcome       "
  1051.       MAIN.FUNCTION$(8,1)        = "J)oin a conference     "
  1052.       MAIN.FUNCTION$(9,1)        = "K)ill messages         "
  1053.       MAIN.FUNCTION$(10,1)       = "O)perator page         "
  1054.       MAIN.FUNCTION$(11,1)       = "P)ersonal mail         "
  1055.       MAIN.FUNCTION$(12,1)       = "R)ead messages         "
  1056.       MAIN.FUNCTION$(13,1)       = "S)can messages header  "
  1057.       MAIN.FUNCTION$(14,1)       = "T)opic msg scan        "
  1058.       MAIN.FUNCTION$(15,1)       = "U)tilities subsystem   "
  1059.       MAIN.FUNCTION$(16,1)       = "V)iew conference mail  "
  1060.       MAIN.FUNCTION$(17,1)       = "W)ho's on other nodes  "
  1061.       MAIN.FUNCTION$(18,1)       = "@)Library subsystem    "
  1062.       MAIN.FUNCTION$(1,2)        = "A"
  1063.       MAIN.FUNCTION$(2,2)        = "B"
  1064.       MAIN.FUNCTION$(3,2)        = "C"
  1065.       MAIN.FUNCTION$(4,2)        = "D"
  1066.       MAIN.FUNCTION$(5,2)        = "E"
  1067.       MAIN.FUNCTION$(6,2)        = "F"
  1068.       MAIN.FUNCTION$(7,2)        = "I"
  1069.       MAIN.FUNCTION$(8,2)        = "J"
  1070.       MAIN.FUNCTION$(9,2)        = "K"
  1071.       MAIN.FUNCTION$(10,2)       = "O"
  1072.       MAIN.FUNCTION$(11,2)       = "P"
  1073.       MAIN.FUNCTION$(12,2)       = "R"
  1074.       MAIN.FUNCTION$(13,2)       = "S"
  1075.       MAIN.FUNCTION$(14,2)       = "T"
  1076.       MAIN.FUNCTION$(15,2)       = "U"
  1077.       MAIN.FUNCTION$(16,2)       = "V"
  1078.       MAIN.FUNCTION$(17,2)       = "W"
  1079.       MAIN.MESSAGE.BACKUP$       = D$ + "MESSAGES.BAK"
  1080.       MAIN.MESSAGE.FILE$         = D$ + "MESSAGES"
  1081.       MAIN.PUI$                  = D$ + "MAIN.PUI"
  1082.       MAIN.USER.FILE$            = D$ + "USERS"
  1083.       MASTER.DIRECTORY.NAME$     = ""
  1084.       MAX.ALLOWED.MSGS.FRM.DEF   = 5
  1085.       MAX.CARRIER.WAIT           = 30
  1086.       MAX.DESC.LEN               = 40
  1087.       MAX.EXTENDED.LINES         = 2
  1088.       MAX.MESSAGE.LINES          = 19
  1089.       MAX.PER.DAY                = 0
  1090.       MAX.REG.SEC                = 0
  1091.       MAX.USR.FILE.SIZE.FRM.DEF  = 16
  1092.       MAX.WORK.VAR               = 30
  1093.       MAXD                       = 15
  1094.       MAXIMUM.DISPLAYABLE.PAGES  = 17
  1095.       MAXIMUM.PASSWORD.CHANGES   = 3
  1096.       MAXIMUM.VIOLATIONS         = 5
  1097.       MAXIMUM.NUMBER.OF.NODES    = 1
  1098.       MENU$(1)                   = D$ + "MENU1"
  1099.       MENU$(2)                   = D$ + "MENU2"
  1100.       MENU$(3)                   = D$ + "MENU3"
  1101.       MENU$(4)                   = D$ + "MENU4"
  1102.       MENU$(5)                   = D$ + "MENU5"
  1103.       MENU$(6)                   = D$ + "MENU6"
  1104.       MENUS.CAN.PAUSE            = TRUE
  1105.       MESSAGE.REMINDER           = TRUE
  1106.       MESSAGES.CAN.GROW          = FALSE
  1107.       MIN.NEWCALLER.BAUD         = 0
  1108.       MIN.OLDCALLER.BAUD         = 0
  1109.       MIN.SEC.TO.VIEW            = DEFAULT.SECURITY.LEVEL
  1110.       MINIMUM.LOGON.SECURITY     = 0
  1111.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = 5
  1112.       MINUTES.PER.SESSION!       = 72
  1113.       MLCOM                      = FALSE
  1114.       MM                         = 5
  1115.       MO$                        = DD$
  1116.       MUSIC                      = FALSE
  1117.       NET.MAIL$                  = "<none>"
  1118.       NETWORK.TYPE               = 0
  1119.       NETWORK.TYPE$              = "IBM's DOS"
  1120.       NEW.FILES.CHECK            = FALSE
  1121.       NEW.USER.QUESTIONNAIRE$    = D$ + "RBBS-REG.DEF"
  1122.       NEWUSER.FILE$              = D$ + "NEWUSER"
  1123.       NEWUSER.SETS.DEFAULTS      = TRUE
  1124.       OMIT.MAIN.DIRECTORY$       = "NO"
  1125.       OMIT.UPLOAD.DIRECTORY$     = "NO"
  1126.       OVERWRITE.SECURITY.LEVEL   = SYSOP.SECURITY.LEVEL
  1127.       PAGE.LENGTH                = 23
  1128.       PAGING.PRINTER.SUPPORT$    = ". "
  1129.       PASSWORD.FILE$             = D$ + "PASSWRDS"
  1130.       PCJR                       = FALSE
  1131.       PERSONAL.BEGIN             = 1
  1132.       PERSONAL.DIR$              = D$+"PRIV.DEF"
  1133.       PERSONAL.DRVPATH$          = D$
  1134.       PERSONAL.LEN               = 31
  1135.       PERSONAL.CONCAT            = FALSE
  1136.       PRELOG$                    = D$ + "PRELOG"
  1137.       PRIVATE.READ.SEC           = DEFAULT.SECURITY.LEVEL
  1138.       PROTO.DEF$                 = D$ + "PROTO.DEF"
  1139.       PROMPT.BELL                = 0
  1140.       PROMPT.HASH$               = "Name"
  1141.       PROMPT.INDIV$              = ""
  1142.       PS                         = 5
  1143.       PUBLIC.READ.SEC            = DEFAULT.SECURITY.LEVEL
  1144.       QUES.PATH$                 = D$
  1145.       RBBS.BAT$                  = D$ + "RBBS" + NODE.ID$ + ".BAT"
  1146.       RBBS.NAME$                 = "RBBS-PC"
  1147.       RCTTY.BAT$                 = D$ + "RCTTY" + NODE.ID$ + ".BAT"
  1148.       RECYCLE.TO.DOS             = 0
  1149.       RECYCLE.TO.DOS$            = "INTERNAL"
  1150.       RECYCLE.WAIT               = 0
  1151.       REDIRECT.IO.METHOD         = TRUE
  1152.       REGISTRATION.PROGRAM$      = "<none>"
  1153.       REMEMBER.NEW.USERS         = TRUE
  1154.       REMIND.FILE.TRANSFERS      = FALSE
  1155.       REMIND.PROFILE             = FALSE
  1156.       REQUIRE.NON.ASCII          = TRUE
  1157.       REQUIRED.QUESTIONNAIRE$    = "<none>"
  1158.       REQUIRED.RINGS             = 1
  1159.       RESTRICT.BAUD              = FALSE
  1160.       RESTRICT.BY.DATE           = FALSE
  1161.       RESTRICT.VALID.CMDS        = FALSE
  1162.       RTS$                       = "NO"
  1163.       SCREEN.OUT.MSG$            = "SEEN-BY: "
  1164.       SEC.CHANGE.MSG             = SYSOP.SECURITY.LEVEL
  1165.       SEC.LVL.EXEMPT.FRM.PURGING = SYSOP.SECURITY.LEVEL
  1166.       SECVIO.HLP$                = D$ + "SECVIO." + HELP.EXTENSION$
  1167.       SECURITY.EXEMPT.FROM.EPILOG= DEFAULT.SECURITY.LEVEL + 1
  1168.       SF                         = SYSOP.SECURITY.LEVEL
  1169.       SHOOT.YOURSELF             = FALSE
  1170.       SHOW.SECTION               = TRUE
  1171.       SIZE.OF.STACK              = 1024
  1172.       SL.CATEGORIZE.UPLOADS      = SYSOP.SECURITY.LEVEL
  1173.       SMART.TEXT                 = 123
  1174.       START.HASH                 = 1
  1175.       START.INDIV                = 0
  1176.       START.OFFICE.HOURS         = 800
  1177.       SURVIVE.NOUSER.ROOM        = FALSE
  1178.       SWITCH.BACK                = FALSE
  1179.       SYSOP.COMMANDS.DEFAULTS$   = "1234567"
  1180.       SYSOP.COMMANDS$            = SYSOP.COMMANDS.DEFAULTS$
  1181.       SYSOP.FUNCTION$(1,1)       = " 1 List comments      "
  1182.       SYSOP.FUNCTION$(2,1)       = " 2 List CALLERS log   "
  1183.       SYSOP.FUNCTION$(3,1)       = " 3 Recover a message  "
  1184.       SYSOP.FUNCTION$(4,1)       = " 4 Erase comments     "
  1185.       SYSOP.FUNCTION$(5,1)       = " 5 User maintenance   "
  1186.       SYSOP.FUNCTION$(6,1)       = " 6 Toggle Page bell   "
  1187.       SYSOP.FUNCTION$(7,1)       = " 7 Exit to DOS        "
  1188.       SYSOP.FUNCTION$(1,2)       = " 1"
  1189.       SYSOP.FUNCTION$(2,2)       = " 2"
  1190.       SYSOP.FUNCTION$(3,2)       = " 3"
  1191.       SYSOP.FUNCTION$(4,2)       = " 4"
  1192.       SYSOP.FUNCTION$(5,2)       = " 5"
  1193.       SYSOP.FUNCTION$(6,2)       = " 6"
  1194.       SYSOP.FUNCTION$(7,2)       = " 7"
  1195.       SYSOP.FIRST.NAME$          = "TOM"
  1196.       SYSOP.LAST.NAME$           = "MACK"
  1197.       SYSOP.MENU.SECURITY.LEVEL  = SYSOP.SECURITY.LEVEL
  1198.       SYSOP.PASSWORD.1$          = "SECRET"
  1199.       SYSOP.PASSWORD.2$          = "NAME"
  1200.       TIME.TO.DROP.TO.DOS        = 0
  1201.       TRASHCAN.FILE$             = D$ + "TRASHCAN"
  1202.       TURN.PRINTER.OFF           = FALSE
  1203.       TURBO.RBBS                 = TRUE
  1204.       UE                         = 5
  1205.       FMS.DIRECTORY$             = ""
  1206.       UPCAT.HELP$                = "UPCAT"
  1207.       UPLOAD.DIRECTORY$          = "99"
  1208.       UPLOAD.PATH$               = D$
  1209.       UPLOAD.SUBDIR$             = ""
  1210.       UPLOAD.TIME.FACTOR!        = 0
  1211.       UPLOAD.TO.SUBDIR           = FALSE
  1212.       USE.BASIC.WRITES           = FALSE
  1213.       USE.DEVICE.DRIVER$         = ""
  1214.       USER.LOCATION$             = "CITY and STATE"
  1215.       UTIL.COMMANDS.DEFAULTS$    = "BCEFGLMPRSTU"
  1216.       UTIL.COMMANDS$             = UTIL.COMMANDS.DEFAULTS$
  1217.       UTILITY.FUNCTION$(1,1)     = "B)aud rate            "
  1218.       UTILITY.FUNCTION$(2,1)     = "C)lock (time)         "
  1219.       UTILITY.FUNCTION$(3,1)     = "E)cho                 "
  1220.       UTILITY.FUNCTION$(4,1)     = "F)ile x-fer protocol  "
  1221.       UTILITY.FUNCTION$(5,1)     = "G)raphics             "
  1222.       UTILITY.FUNCTION$(6,1)     = "L)ines per page       "
  1223.       UTILITY.FUNCTION$(7,1)     = "M)sg margin setting   "
  1224.       UTILITY.FUNCTION$(8,1)     = "P)assword change      "
  1225.       UTILITY.FUNCTION$(9,1)     = "R)eview defaults      "
  1226.       UTILITY.FUNCTION$(10,1)    = "S)tatistics           "
  1227.       UTILITY.FUNCTION$(11,1)    = "T)oggle               "
  1228.       UTILITY.FUNCTION$(12,1)    = "U)ser log scan        "
  1229.       VOICE.TYPE                 = 0
  1230.       VOICE.TYPE$                = NONE.PICKED$
  1231.       XON.XOFF                   = FALSE
  1232.       FOR I = 1 TO LEN(UTIL.COMMANDS.DEFAULTS$)
  1233.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS.DEFAULTS$,I,1)
  1234.       NEXT
  1235.       WAIT.BEFORE.DISCONNECT     = 180
  1236.       WELCOME.FILE$              = D$ + "WELCOME"
  1237.       WELCOME.INTERRUPTABLE      = TRUE
  1238.       WILL.SUBDIRS.B.USED        = FALSE
  1239.       WRITE.BUF.DEF              = 1024
  1240.       FOR I = 1 TO NUM.SYSOP
  1241.          SYSOP.FUNCTION(I) = SF
  1242.       NEXT
  1243.       FOR I = 1 TO NUM.MAIN
  1244.          MAIN.FUNCTION(I) = MM
  1245.       NEXT
  1246.       FOR I = 1 TO NUM.FILES
  1247.          FILES.FUNCTION(I) = FC
  1248.       NEXT
  1249.       FOR I = 1 TO NUM.LIBRARY
  1250.          LIBRARY.FUNCTION(I) = PS
  1251.       NEXT
  1252.       FOR I = 1 TO NUM.UTILITY
  1253.          UTILITY.FUNCTION(I) = UE
  1254.       NEXT
  1255.       FOR I = 1 TO NUM.GLOBAL
  1256.          GLOBAL.FUNCTION(I) = GB
  1257.       NEXT
  1258.       CALL MODEMINITCMD
  1259.       END SUB
  1260. '  $SUBTITLE: 'VOICETYPE - subroutine to select voice'
  1261. '  $PAGE
  1262. '
  1263. '  SUBROUTINE NAME    --  VOICETYPE
  1264. '
  1265. '  INPUT PARAMETERS   --  VOICE.TYPE
  1266. '                         VOICE.TYPE$
  1267. '                         SUBROUTINE.PARAMETER
  1268. '
  1269. '  OUTPUT PARAMETERS  --  VOICE.TYPE
  1270. '                         VOICE.TYPE$
  1271. '
  1272. '  SUBROUTINE PURPOSE --  TO SELECT THE RBBS-PC SUPPORTED VOICE
  1273. '                         SYNTHESIZERS
  1274. '
  1275.       SUB VOICETYPE STATIC
  1276.       ON SUBROUTINE.PARAMETER GOTO 60482,60484
  1277. 60482 CLS
  1278.       LOCATE 3,1
  1279.       PRINT "     RBBS-PC is supported in the following:"
  1280.       PRINT "            Voice Synthesizers"
  1281.       PRINT "          0. None"
  1282.       PRINT "          1. CompuTalker"
  1283.       PRINT "             B.G. MICRO"
  1284.       PRINT "             P.O. Box 280298"
  1285.       PRINT "             Dallas, Texas 75228"
  1286.       PRINT "          2. HearSay 1000"
  1287.       PRINT "             HEARSAY INC."
  1288.       PRINT "             1825 74th Street"
  1289.       PRINT "             Brooklyn, New York 11204"
  1290. 60483 CALL ASKRO("Select environment (0 to 2, [ENTER] quits)",24,X$)
  1291.       IF X$ = "" THEN _
  1292.          EXIT SUB
  1293.       VOICE.TYPE = VAL(X$)
  1294.       IF VOICE.TYPE < 0 OR VOICE.TYPE > 2 THEN _
  1295.          GOTO 60483
  1296. 60484 IF VOICE.TYPE = 0 THEN _
  1297.          VOICE.TYPE$ = NONE.PICKED$
  1298.       IF VOICE.TYPE = 1 THEN _
  1299.          VOICE.TYPE$ = "CompuTalker"
  1300.       IF VOICE.TYPE = 2 THEN _
  1301.          VOICE.TYPE$ = "HearSay 1000"
  1302.       END SUB
  1303. '  $SUBTITLE: 'ASKRO - ask a question at a specific row'
  1304. '  $PAGE
  1305. '
  1306. '  SUBROUTINE NAME    --  ASKRO
  1307. '
  1308. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1309. '                         ANS$           STRING TO PUT THE ANSWER IN
  1310. '                         STRNG$         STRING CONTAINING THE QUESTION
  1311. '                         RO             ROW TO ASK THE QUESTION ON
  1312. '
  1313. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1314. '
  1315. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AT A
  1316. '                         SPECIFIC ROW
  1317. '
  1318.       SUB ASKRO (STRNG$,RO,ANS$) STATIC
  1319. 61100 LOCATE RO,1
  1320.       PRINT SPACE$(79);
  1321.       LOCATE RO,5
  1322.       PRINT STRNG$;" ";
  1323.       LINE INPUT;ANS$
  1324.       END SUB
  1325. '  $SUBTITLE: 'GETINIT - get an integer'
  1326. '  $PAGE
  1327. '
  1328. '  SUBROUTINE NAME    --  GETINIT
  1329. '
  1330. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1331. '                         ANS            WHERE TO PUT THE ANSWER IN
  1332. '                         STRNG$         STRING CONTAINING THE QUESTION
  1333. '                         RO             ROW TO ASK THE QUESTION ON
  1334. '                         MIN            MINIMUM ACCEPTABLE NUMBER
  1335. '                         MAX            MAXIMUM ACCEPTABLE NUMBER
  1336. '
  1337. '  OUTPUT PARAMETERS  --  ANS            RESPONSE FROM THE KEYBOARD
  1338. '
  1339. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AT A
  1340. '                         SPECIFIC ROW AND GET AN INTEGER BACK
  1341. '
  1342.       SUB GETINIT (STRNG$,RO,MIN,MAX,ANS,CR) STATIC
  1343. 61110 LOCATE RO,1
  1344.       CR = FALSE
  1345.       ANS = MIN
  1346.       PRINT SPACE$(79);
  1347.       LOCATE RO,5
  1348.       PRINT STRNG$;" ";
  1349.       LINE INPUT;ANS$
  1350.       IF ANS$ = "" THEN _
  1351.          CR = TRUE : _
  1352.          EXIT SUB
  1353.       IF VAL(ANS$) < MIN OR _
  1354.          VAL(ANS$) > MAX THEN _
  1355.          GOTO 61110
  1356.       ANS = VAL(ANS$)
  1357.       IF ANS = 0 AND LEFT$(ANS$,1) <> "0" THEN _
  1358.          GOTO 61110
  1359.       END SUB
  1360. '  $SUBTITLE: 'GETNUMYN - get a TRUE-FALSE answer to a YES OR NO question'
  1361. '  $PAGE
  1362. '
  1363. '  SUBROUTINE NAME    --  GETNUMYN
  1364. '
  1365. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1366. '                         STRNG$         STRING CONTAINING THE QUESTION
  1367. '
  1368. '  OUTPUT PARAMETERS  --  ANS            Returned value - -1 IF yes, 0 IF no
  1369. '
  1370. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1371. '                         YES OR NO ANSWER CONVERTED TO TRUE/FALSE
  1372. '
  1373.        SUB GETNUMYN (STRNG$,ANS) STATIC
  1374.        CALL GETYESNO (STRNG$,ANS$)
  1375.        ANS = FNYESNO (ANS$)
  1376.        END SUB
  1377. '  $SUBTITLE: 'GETYESNO - Ask a YES OR NO question'
  1378. '  $PAGE
  1379. '
  1380. '  SUBROUTINE NAME    --  GETYESNO
  1381. '
  1382. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1383. '                         ANS$           STRING TO PUT THE ANSWER IN
  1384. '                         STRNG$         STRING CONTAINING THE QUESTION
  1385. '
  1386. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1387. '
  1388. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1389. '                         YES OR NO ANSWER
  1390. '
  1391.       SUB GETYESNO (STRNG$,ANS$) STATIC
  1392. 61200 CALL ASKRO (STRNG$+" Y)es or N)o",24,HJ$)
  1393.       L = LEN(HJ$)
  1394.       IF L < 1 OR L > 3 THEN _
  1395.          GOTO 61207
  1396.       CALL ALLCAPS(HJ$)
  1397.       X = INSTR("NY",LEFT$(HJ$,1))
  1398.       ON X GOTO 61210,61212
  1399. 61207 BEEP
  1400.       GOTO 61200
  1401. 61210 ANS$ = "NO"
  1402.       EXIT SUB
  1403. 61212 ANS$ = "YES"
  1404.       EXIT SUB
  1405.       END SUB
  1406. '  $SUBTITLE: 'ALLCAPS - convert a sting into all capital letters'
  1407. '  $PAGE
  1408. '
  1409. '  SUBROUTINE NAME    --  ALLCAPS
  1410. '
  1411. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1412. '                         STRNG$         STRING CONTAINING THE QUESTION
  1413. '
  1414. '  OUTPUT PARAMETERS  --  STRNG$         CAPITALIZED STRING
  1415. '
  1416. '  SUBROUTINE PURPOSE --  TO CAPITALIZE A STRING
  1417. '
  1418.       SUB ALLCAPS (STRNG$) STATIC
  1419.       FOR WasZ = 1 TO LEN(STRNG$)
  1420.          WasX = ASC(MID$(STRNG$,WasZ,1))
  1421.          IF WasX > 96 THEN IF WasX < 123 THEN _
  1422.             MID$(STRNG$,WasZ,1) = CHR$(WasX AND 223)
  1423.       NEXT
  1424.       END SUB
  1425. '  $SUBTITLE: 'ASKUPOS - find the unique user field for USERS'
  1426. '  $PAGE
  1427. '
  1428. '  SUBROUTINE NAME    --  ASKUPOS
  1429. '
  1430. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1431. '                         HDR$           HEADER
  1432. '                         BEGIN.COL      BEGINNING COLUMN OF FIELD
  1433. '                         FIELD.LEN      LENGTH OF FIELD IN USER'S RECORD
  1434. '                         PRMPT$         PROMPT TO GIVE FOR FIELD
  1435. '
  1436. '  OUTPUT PARAMETERS  --  ABOVE INPUTS UPDATED WITH USER'S RESPONSES
  1437. '
  1438. '  SUBROUTINE PURPOSE --  TO ASK THE SYSOP WHAT UNIQUE FIELD IN THE USERS
  1439. '                         RECORD IS TO BE ASKED FOR AT LOGON
  1440. '
  1441.       SUB ASKUPOS (HDR$,BEGIN.COL,FIELD.LEN,PRMPT$) STATIC
  1442.       CLS
  1443.       LOCATE 3,20
  1444.       PRINT HDR$;
  1445. 61300 LOCATE 6,5
  1446.       PRINT "1.  BEGINNING COLUMN in USERS file";TAB(44);STR$(BEGIN.COL);"   ";
  1447.       LOCATE 8,5
  1448.       PRINT "2.  Number of CHARACTERS to use";TAB(44);STR$(FIELD.LEN);"   ";
  1449.       LOCATE 10,5
  1450.       PRINT "3.  PROMPT to display to callers";TAB(45);PRMPT$;SPACE$(34-LEN(PRMPT$));
  1451. 61310 CALL ASKRO ("Select option to change (1-3, ENTER to end)",24,X$)
  1452.       IF X$ = "" THEN _
  1453.          EXIT SUB
  1454.       X = VAL(X$)
  1455.       IF X < 1 OR X > 3 THEN _
  1456.          GOTO 61310
  1457.       ON X GOTO 61320,61330,61340
  1458. 61320 CALL ASKRO ("New BEGINNING COLUMN",24,HJ$)
  1459.       IF HJ$ = "" THEN _
  1460.          GOTO 61320
  1461.       X = VAL(HJ$)
  1462.       IF X < 0 OR X > 128 THEN _
  1463.          GOTO 61320
  1464.       BEGIN.COL = X
  1465.       GOTO 61300
  1466. 61330 CALL ASKRO ("New # CHARACTERS to use",24,HJ$)
  1467.       IF HJ$ = "" THEN _
  1468.          GOTO 61330
  1469.       X = VAL(HJ$)
  1470.       IF X < 0 OR X > 31 THEN _
  1471.          GOTO 61330
  1472.       FIELD.LEN = X
  1473.       GOTO 61300
  1474. 61340 CALL ASKRO ("New PROMPT",24,HJ$)
  1475.       IF LEN(HJ$) > 34 THEN _
  1476.          GOTO 61340
  1477.       PRMPT$ = HJ$
  1478.       GOTO 61300
  1479.       END SUB
  1480. '  $SUBTITLE: 'ANYNUMBER - input any numeric value'
  1481. '  $PAGE
  1482. '
  1483. '  SUBROUTINE NAME    --  ANYNUMBER
  1484. '
  1485. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1486. '                         PRMPT$           PROMPT
  1487. '
  1488. '  OUTPUT PARAMETERS  --  RETURNED.VALUE!  VALUE RETURNED
  1489. '
  1490. '  SUBROUTINE PURPOSE --  TO GET A NUMERIC VALUE
  1491. '
  1492.       SUB ANYNUMBER (PRMPT$,RETURNED.VALUE!) STATIC
  1493. 61400 CALL ASKRO (PRMPT$,24,HJ$)
  1494.       RETURNED.VALUE! = VAL(HJ$)
  1495.       END SUB
  1496. '  $SUBTITLE: 'ANYINTEGER - input any integer value'
  1497. '  $PAGE
  1498. '
  1499. '  SUBROUTINE NAME    --  ANYINTEGER
  1500. '
  1501. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1502. '                         PRMPT$           PROMPT TO DISPLAY
  1503. '
  1504. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1505. '
  1506. '  SUBROUTINE PURPOSE --  TO GET AN INTEGER VALUE
  1507. '
  1508.       SUB ANYINTEGER (PRMPT$,RETURNED.VALUE) STATIC
  1509. 61450 CALL ANYNUMBER (PRMPT$,RETURNED.VALUE!)
  1510.       IF RETURNED.VALUE! >  32767.0 OR _
  1511.          RETURNED.VALUE! < -32767.0 THEN_
  1512.          BEEP : _
  1513.          GOTO 61450
  1514.       RETURNED.VALUE = RETURNED.VALUE!
  1515.       END SUB
  1516. '  $SUBTITLE: 'MMINTEGER - input any integer value with range check'
  1517. '  $PAGE
  1518. '
  1519. '  SUBROUTINE NAME    --  MMINTEGER
  1520. '
  1521. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1522. '                         PRMPT$           PROMPT
  1523. '                         MIN              MINIMUM VALUE (INCLUSIVE)
  1524. '                         MAX              MAXIMUM VALUE (INCLUSIVE)
  1525. '
  1526. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1527. '
  1528. '  SUBROUTINE PURPOSE --  TO GET AN INTEGER VALUE WITHIN A RANGE
  1529. '
  1530.       SUB MMINTEGER (PRMPT$,MIN,MAX,RETURNED.VALUE) STATIC
  1531. 61500 CALL ANYINTEGER (PRMPT$,RETURNED.VALUE)
  1532.       IF RETURNED.VALUE < MIN OR RETURNED.VALUE > MAX THEN _
  1533.          BEEP : _
  1534.          GOTO 61500
  1535.       END SUB
  1536. '  $SUBTITLE: 'MMREAL - input any single precision real # with range check'
  1537. '  $PAGE
  1538. '
  1539. '  SUBROUTINE NAME    --  MMREAL
  1540. '
  1541. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1542. '                         PRMPT$           PROMPT
  1543. '                         MIN!             MINIMUM VALUE (INCLUSIVE)
  1544. '                         MAX!             MAXIMUM VALUE (INCLUSIVE)
  1545. '
  1546. '  OUTPUT PARAMETERS  --  RETURNED.VALUE!  VALUE RETURNED
  1547. '
  1548. '  SUBROUTINE PURPOSE --  TO GET AN REAL # VALUE WITHIN A RANGE
  1549. '
  1550.       SUB MMREAL (PRMPT$,MIN!,MAX!,RETURNED.VALUE!) STATIC
  1551. 61550 CALL ANYNUMBER (PRMPT$,RETURNED.VALUE!)
  1552.       IF RETURNED.VALUE! < MIN! OR RETURNED.VALUE! > MAX! THEN _
  1553.          BEEP : _
  1554.          GOTO 61550
  1555.       END SUB
  1556. '  $SUBTITLE: 'FINDFILE - Determine whether a file exists'
  1557. '  $PAGE
  1558. '
  1559. '  SUBROUTINE NAME    --  FINDFILE
  1560. '
  1561. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1562. '                         FILNAME$         FILE TO LOOK FOR
  1563. '                         FEXISTS          WHETHER FILE EXISTS
  1564. '
  1565. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1566. '
  1567. '  SUBROUTINE PURPOSE --  DETERMINE WHETHER PASSED FILE NAME EXISTS
  1568. '                         RETURN TRUE OR FALSE IN "FEXISTS"
  1569. '
  1570.       SUB FINDFILE (FILNAME$,FEXISTS) STATIC
  1571. 61600 CALL RBBSFIND (FILNAME$,Z,Y,M,D)
  1572.       FEXISTS = (Z = 0)
  1573.       END SUB
  1574. '  $SUBTITLE: 'CHKFMSDIR - Validate structure of FMS directory'
  1575. '  $PAGE
  1576. '
  1577. '  SUBROUTINE NAME    --  CHKFMSDIR
  1578. '
  1579. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1580. '                         FMSDIR$         NAME OF FMS DIRECTORY
  1581. '                         LINELEN         PROPER LENGTH OF LINES
  1582. '                                         (EXCLUDING CR/LF AT END)
  1583. '                         FMS.DIRCAT$     CATEGORY FILE FOR FMS
  1584. '
  1585. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   VALUE RETURNED
  1586. '
  1587. '  SUBROUTINE PURPOSE --  VERIFIES THAT FMS IS IN VALID FORMAT
  1588. '                         AND DIAGNOSES PROBLEMS
  1589. '
  1590. 61700 SUB CHKFMSDIR (FMSDIR$,LINELEN,FMS.DIRCAT$) STATIC
  1591.       CALL GETNUMYN ("Really check FMS directory",AB)
  1592.       IF NOT AB THEN _
  1593.          EXIT SUB
  1594.       DIM CAT.CODE$(99)
  1595.       CALL SETSCRCHK ("FMS",FMSDIR$)
  1596.       NCATS = 0
  1597.       CALL FINDFILE (FMS.DIRCAT$,FEXISTS)
  1598.       IF NOT FEXISTS THEN _
  1599.          GOTO 61702
  1600.       NCATS = 1
  1601.       CAT.CODE$(1) = "***"
  1602.       IF NETWORK.TYPE = 6 THEN _
  1603.          OPEN FMS.DIRCAT$ FOR INPUT SHARED AS #2 _
  1604.       ELSE  OPEN FMS.DIRCAT$ FOR INPUT AS #2
  1605.       WHILE NOT EOF(2) AND NCATS < UBOUND(CAT.CODE$)
  1606.          NCATS = NCATS + 1
  1607.          INPUT #2,X$,Y$,X$
  1608.          CAT.CODE$(NCATS) = Y$
  1609.       WEND
  1610.       CLOSE 2
  1611. 61702 GO.ON = -1
  1612.       CALL FINDFILE (FMSDIR$,FEXISTS)
  1613.       IF NOT FEXISTS THEN _
  1614.          LOCATE 6,25 : _
  1615.          PRINT "File not found"; : _
  1616.          GOTO 61750
  1617.       IF NETWORK.TYPE = 6 THEN _
  1618.          OPEN FMSDIR$ FOR INPUT SHARED AS #2 _
  1619.       ELSE OPEN FMSDIR$ FOR INPUT AS #2
  1620.       WHILE NOT EOF(2) AND GO.ON
  1621.          NLINES = NLINES + 1
  1622.          LINE INPUT #2, A$
  1623.          L = LEN(A$)
  1624.          LOCATE 7,36
  1625.          PRINT NLINES;
  1626.          IF L > LINELEN THEN _
  1627.             CALL HANDERR (A$,NLINES,"Too LONG: has" + STR$(L) + " chars but should have" + STR$(LINELEN),GO.ON):_
  1628.             IF NOT GO.ON THEN _
  1629.                GOTO 61740
  1630.          IF L < LINELEN THEN _
  1631.             X$ = "Too SHORT: has" + STR$(L) + " chars but should have" + STR$(LINELEN) : _
  1632.             CALL HANDERR (A$,NLINES,X$,GO.ON):_
  1633.             IF NOT GO.ON THEN _
  1634.                GOTO 61740
  1635.          IF L = LINELEN THEN _
  1636.             I = INSTR(A$," ") : _
  1637.             IF I = 0 OR I > 13 THEN _
  1638.                CALL HANDERR (A$,NLINES, "Space must begin line or be after file name",GO.ON) : _
  1639.                IF NOT GO.ON THEN _
  1640.                   GOTO 61740
  1641.          IF L > 0 THEN _
  1642.             IF INSTR ("\* ",LEFT$(A$,1)) THEN _
  1643.                GOTO 61740
  1644.          IF L > 30 THEN _
  1645.             X$ = MID$(A$,24,2) + _
  1646.                  MID$(A$,27,2) + _
  1647.                  MID$(A$,30,2) : _
  1648.             I = 1 : _
  1649.             WHILE I < 7 AND INSTR("0123456789",MID$(X$,I,1)) > 0 : _
  1650.                I = I + 1: _
  1651.             WEND: _
  1652.             IF I < 7 THEN _
  1653.                CALL HANDERR (A$,NLINES,"INVALID CHARACTER <" + MID$(X$,I,1) + "> in date field",GO.ON) : _
  1654.                IF NOT GO.ON THEN _
  1655.                   GOTO 61740
  1656.          I = 1
  1657.          Y$ = MID$(A$,L - 2)
  1658.          CALL REMOVE (Y$," ")
  1659.          WHILE I <= NCATS AND Y$ <> CAT.CODE$(I)
  1660.             I = I + 1
  1661.          WEND
  1662.          IF I > NCATS THEN _
  1663.             CALL HANDERR (A$,NLINES,"Category code <" + Y$ + "> NOT IN " + FMS.DIRCAT$,GO.ON)
  1664. 61740 WEND
  1665. 61750 CLOSE 2
  1666.       IF NOT GO.ON THEN _
  1667.          COLOR FG,BG,BORDER : _
  1668.          EXIT SUB
  1669.       CALL CHKRANDOM (FMSDIR$,LINELEN,"FMS")
  1670.       END SUB
  1671.  
  1672. 61751 SUB CHKRANDOM (CHKTHIS$, LINELEN, KindChk$) STATIC
  1673.       LOCATE 15,15
  1674.       BEEP
  1675.       CALL ASKRO ("          1st check done.  Press [ENTER] to continue",20,ANS$)
  1676.       CALL SETSCRCHK (KindChk$,CHKTHIS$)
  1677.       RECLEN = LINELEN + 2
  1678.       IF NETWORK.TYPE = 6 THEN _
  1679.          OPEN CHKTHIS$ FOR RANDOM SHARED AS #2 LEN=RECLEN _
  1680.       ELSE OPEN "R",2,CHKTHIS$,RECLEN
  1681.       FIELD 2, RECLEN AS FMSREC$
  1682.       LASTREC = LOF(2)/RECLEN
  1683.       CRLF$ = CHR$(13) + CHR$(10)
  1684.       FOR NLINES = 1 TO LASTREC
  1685.          GET 2,NLINES
  1686.          LOCATE 7,36
  1687.          PRINT NLINES;
  1688.          IF INSTR ("\*=",MID$(FMSREC$,1,1)) THEN _
  1689.             GOTO 61753
  1690.          I = INSTR(FMSREC$," ") : _
  1691.          IF I = 0 OR I > 13 THEN _
  1692.             J = INSTR(FMSREC$,CHR$(0)) : _
  1693.             IF J > 0 AND J < I THEN _
  1694.                CALL HANDERR (FMSREC$,NLINES, "Space must begin line or be after file name",GO.ON) : _
  1695.                IF NOT GO.ON THEN _
  1696.                   GOTO 61752
  1697.          IF RIGHT$(FMSREC$,2) <> CRLF$ THEN _
  1698.             CALL HANDERR (FMSREC$,NLINES,"Does not end with carriage-return-line-feed",GO.ON) :_
  1699.             IF NOT GO.ON THEN _
  1700.                GOTO 61752
  1701.         GOTO 61753
  1702.  
  1703. 61752   NLINES = LASTREC + 1
  1704.  
  1705. 61753 NEXT
  1706.       CLOSE 2
  1707.       BEEP
  1708.       CALL ASKRO ("           Done checking.  Press [ENTER] to continue",20,ANS$)
  1709.       COLOR FG,BG,BORDER
  1710.       END SUB
  1711. 61754 SUB SETSCRCHK (KindChk$,FileChk$) STATIC
  1712.       CLS
  1713.       LOCATE 5,14
  1714.       PRINT "Checking ";KindChk$;" Directory ";FileChk$
  1715.       NLINES = 0
  1716.       LOCATE 7,27
  1717.       PRINT "Line #";
  1718.       LOCATE 9,20
  1719.       COLOR 0,7
  1720.       PRINT " Last Line with an ERROR ";
  1721.       LOCATE 12,28
  1722.       PRINT " Last ERROR ";
  1723.       COLOR 7,0
  1724.       END SUB
  1725.  
  1726. 61755 SUB CHKPERSDIR (PDIR$, DESC.LEN, NAMELEN) STATIC
  1727.       CALL GETNUMYN ("Really check Personal directory",AB)
  1728.       IF NOT AB THEN _
  1729.          EXIT SUB
  1730.       CLS
  1731.       LOCATE 5, 14
  1732.       PRINT "Checking Personal Directory "; PDIR$;
  1733.       NLINES = 0
  1734.       LOCATE 7, 27
  1735.       PRINT "Line #";
  1736.       LOCATE 9, 20
  1737.       COLOR 0, 7
  1738.       PRINT " Last Line with an ERROR ";
  1739.       LOCATE 12, 28
  1740.       PRINT " Last ERROR ";
  1741.       COLOR 7, 0
  1742.       GO.ON = -1
  1743.       CALL FINDFILE(PDIR$, FEXISTS)
  1744.       IF NOT FEXISTS THEN _
  1745.          LOCATE 6, 25: _
  1746.          PRINT "File not found"; : _
  1747.          GOTO 61775
  1748.       LINELEN = 34 + DESC.LEN + NAMELEN
  1749.       IF NETWORK.TYPE = 6 THEN _
  1750.          OPEN PDIR$ FOR INPUT SHARED AS #2 _
  1751.       ELSE OPEN PDIR$ FOR INPUT SHARED AS #2
  1752.       WHILE NOT EOF(2) AND GO.ON
  1753.          NLINES = NLINES + 1
  1754.          LINE INPUT #2, A$
  1755.          L = LEN(A$)
  1756.          LOCATE 7, 36
  1757.          PRINT NLINES;
  1758.          IF L > LINELEN THEN _
  1759.             CALL HANDERR(A$, NLINES, "Too LONG: has" + STR$(L) + " chars but should have" + STR$(LINELEN), GO.ON) : _
  1760.             IF NOT GO.ON THEN _
  1761.                GOTO 61770
  1762.          IF L < LINELEN THEN _
  1763.             CALL HANDERR(A$, NLINES, "Too SHORT: has" + STR$(L) + " chars but should have" + STR$(LINELEN), GO.ON) : _
  1764.                IF NOT GO.ON THEN _
  1765.                   GOTO 61770
  1766.          IF L > 30 AND (LEFT$(A$,1) <> " ") THEN _
  1767.             X$ = MID$(A$, 24, 2) + MID$(A$, 27, 2) + MID$(A$, 30, 2) : _
  1768.             I = 1 : _
  1769.             WHILE I < 7 AND INSTR("0123456789", MID$(X$, I, 1)) > 0 : _
  1770.                I = I + 1 : _
  1771.             WEND : _
  1772.             IF I < 7 THEN _
  1773.                CALL HANDERR(A$, NLINES, "INVALID CHARACTER <" + MID$(X$, I, 1) + "> in date field", GO.ON) : _
  1774.                IF NOT GO.ON THEN _
  1775.                   GOTO 61770
  1776.            IF L = LINELEN THEN _
  1777.               X$ = RIGHT$(A$, 1) : _
  1778.               IF INSTR("*!", X$) = 0 THEN _
  1779.                  CALL HANDERR(A$, NLINES, "Last char on line should be * or ! but found <" + X$ + ">", GO.ON) : _
  1780.                  IF NOT GO.ON THEN  _
  1781.                     GOTO 61770
  1782.            IF L = LINELEN THEN _
  1783.               X$ = MID$(A$, L - NAMELEN, LINELEN) : _
  1784.               IF LEFT$(X$, 1) = " " THEN _
  1785.                  IF INSTR("0123456789-", MID$(X$, 2, 1)) = 0 THEN _
  1786.                     CALL HANDERR(A$, NLINES, "Name field at col" + STR$(L - NAMELEN) + " has <" + LEFT$(X$, 1) + ">, needs non-blank or blank+number", GO.ON) : _
  1787.                     IF NOT GO.ON THEN _
  1788.                        GOTO 61770
  1789.            IF L = LINELEN THEN _
  1790.               I = INSTR(A$," ") : _
  1791.               IF I = 0 OR I > 13 THEN _
  1792.                  CALL HANDERR(A$,NLINES, "Space must begin line or be after file name",GO.ON) : _
  1793.                  IF NOT GO.ON THEN _
  1794.                     GOTO 61770
  1795.  
  1796.       LOCATE 15,15
  1797. 61770 WEND
  1798. 61775 CLOSE 2
  1799.       IF NOT GO.ON THEN _
  1800.          EXIT SUB
  1801.       CALL CHKRANDOM (PDIR$,LINELEN,"Personal")
  1802.       END SUB
  1803. '  $SUBTITLE: 'HANDERR - subroutine to handle FMS errors'
  1804. '  $PAGE
  1805. '
  1806. '  SUBROUTINE NAME    -- HANDERR
  1807. '
  1808. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1809. '                        ERRLINE$                LINE THAT HAS THE ERROR
  1810. '                        ERRL                    LINE NUMBER WITH ERROR
  1811. '                        ERRMES$                 ERROR MESSAGE TO ISSUE
  1812. '
  1813. '  OUTPUT PARAMETERS  -- GO.ON                   INIDCATE TO PROCEDURE OR NOT
  1814. '
  1815. '  SUBROUTINE PURPOSE -- TO HANDLE ERROR CHECKING OF THE FMS DIRECTORY
  1816. '
  1817.       SUB HANDERR (ERRLINE$,ERRL,ERRMES$,GO.ON) STATIC
  1818.       LOCATE 10,1
  1819.       PRINT SPACE$(80);
  1820.       LOCATE 10,1
  1821.       PRINT ERRLINE$;
  1822.       LOCATE 9,45
  1823.       PRINT STR$(ERRL);
  1824.       LOCATE 13,1
  1825.       PRINT SPACE$(79);
  1826.       L = LEN(ERRMES$)
  1827.       IF L > 68 THEN _
  1828.          STRT = 1 _
  1829.       ELSE STRT = (70 - L) / 2
  1830.       LOCATE 13,STRT
  1831.       PRINT ERRMES$;
  1832.       CALL ASKRO ("               CONTINUE checking (Y/N,[ENTER]=Y) ",20,ANS$)
  1833.       IF ANS$ = "" THEN _
  1834.          ANS$ = "Y"
  1835.       CALL ALLCAPS (ANS$)
  1836.       GO.ON = FNYESNO (ANS$)
  1837.       END SUB
  1838. ' $SUBTITLE: 'REMOVE - subroutine to delete a string from within a string'
  1839. ' $PAGE
  1840. '
  1841. '  SUBROUTINE NAME    -- REMOVE
  1842. '
  1843. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1844. '                        BADSTRING$              STRING CONTAINING CHARACTERS
  1845. '                                                TO BE DELETED FROM "L$"
  1846. '                        L$                      STRING TO BE ALTERED
  1847. '
  1848. '  OUTPUT PARAMETERS  -- L$                      WITH THE CHARACTERS IN
  1849. '                                                "BADSTRING#" DELETED FROM IT
  1850. '
  1851. '  SUBROUTINE PURPOSE -- TO REMOVE ALL INSTANCES OF THE CHARACTERS IN
  1852. '                        "BADSTRING$" FROM "L$"
  1853. '
  1854.       SUB REMOVE (L$,BADSTRNG$) STATIC
  1855. 61800 J = 0
  1856.       FOR I = 1 TO LEN(L$)
  1857.          IF INSTR(BADSTRNG$,MID$(L$,I,1)) = 0 THEN_
  1858.             J = J + 1:_
  1859.             MID$(L$,J,1) = MID$(L$,I,1)
  1860.       NEXT I
  1861.       L$ = LEFT$(L$,J)
  1862.       END SUB
  1863. ' $SUBTITLE: 'GETASCII - subroutine to prompt for any ASCII values'
  1864. ' $PAGE
  1865. '
  1866. '  SUBROUTINE NAME    -- GETASCII
  1867. '
  1868. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1869. '                        TITLE$                  HEADER EXPANATION FOR PARAM
  1870. '
  1871. '  OUTPUT PARAMETERS  -- STRNG$                  RESULTANT CONFIG PARAMETER
  1872. '
  1873. '  SUBROUTINE PURPOSE -- ALLOWS ANY ASCII CHARACTER TO BE STORED IN A PARAMETER
  1874. '                        BY ENCLOSING IT IN SQUARE BRACKETS.  CHARACTERS NOT IN
  1875. '                        SQUARE BRACKETS ARE INTERPRETED EXACTLY AS ENTERED.
  1876. '                        CHARACTER'S ASCII VALUE EQUAL THE NUMERIC VALUE IN THE
  1877. '                        SQUARE BRACKETS.
  1878. '
  1879.       SUB GETASCII (TITLE$,STRNG$) STATIC
  1880. 61810 CLS
  1881.       LOCATE 8,30
  1882.       PRINT TITLE$;
  1883.       LOCATE 13,5
  1884.       PRINT "Current value is"
  1885.       PRINT STRNG$
  1886.       PRINT
  1887.       PRINT "Please enter the new values by entering the character"
  1888.       PRINT "or enclosing its ASCII value in square brackets:"
  1889.       PRINT "(Press ENTER to make empty)
  1890.       LINE INPUT "";HJ$
  1891.       STRNG$ = HJ$
  1892.       END SUB
  1893. ' $SUBTITLE: 'BRKFNAME - subroutine to decompose a file name'
  1894. ' $PAGE
  1895. '
  1896. '  SUBROUTINE NAME    -- BRKFNAME
  1897. '
  1898. '  INPUT PARAMETERS   -- PARAMETER                     MEANING
  1899. '                        FILENAME$       NAME OF THE FILE TO BE DECOMPOSED
  1900. '                        FOR.JOINING     INDICATOR IF OUTPUT IS TO BE COMPBINED
  1901. '
  1902. '  OUTPUT PARAMETERS  -- DRVPATH$        DRIVE AND PATH
  1903. '                        PREFIX$         8-CHARACTER FILE NAME PREFIX
  1904. '                        EXTENSION$      3-CHARACTER EXTENSION
  1905. '
  1906. '  SUBROUTINE PURPOSE -- BREAKS DOWN A FILE NAME INTO A DRIVE AND PATH,
  1907. '                        FILE PREFIX (8 CHARACTERS), AND FILE EXTENSION
  1908. '                        (3 CHARACTERS).  IF "FOR.JOINING" IS TRUE, THE
  1909. '                        DRIVE AND PATH HAVE A ":" AND A "\" IN IT AND
  1910. '                        THE EXTENSION BEGINS WITH A ".".
  1911. '
  1912.       SUB BRKFNAME (FILENAME$,DRVPATH$,PREFIX$,EXTENSION$,FOR.JOINING) STATIC
  1913.       FLNAME$ = FILENAME$
  1914. 61830 CALL ALLCAPS (FLNAME$)
  1915.       DRVPATH$ = ""
  1916.       PREFIX$ = ""
  1917.       EXTENSION$ = ""
  1918.       L = LEN(FLNAME$)
  1919.       IF L < 1 THEN _
  1920.          EXIT SUB
  1921.       CALL FINDLAST (FLNAME$,"\",X,Y)
  1922.       IF X < 1 THEN _
  1923.          IF MID$(FLNAME$,2,1) = ":" THEN _
  1924.             DRVPATH$ = LEFT$(FLNAME$, 2): _
  1925.             S = 3 _
  1926.          ELSE S = 1 _
  1927.       ELSE DRVPATH$ = LEFT$(FLNAME$,X) : _
  1928.            S = X + 1
  1929.       X = INSTR(FLNAME$+".",".")
  1930.       IF X < L THEN _
  1931.          EXTENSION$ = MID$(FILENAME$,X)
  1932.       IF S <= L THEN _
  1933.          IF X >= S THEN _
  1934.             PREFIX$ = MID$(FLNAME$,S,X - S)
  1935.       IF FOR.JOINING THEN _
  1936.          EXIT SUB
  1937.       IF Y > 1 THEN _
  1938.          DRVPATH$ = LEFT$(DRVPATH$, LEN(DRVPATH$) - 1)
  1939.       IF LEN(EXTENSION$) > 0 THEN _
  1940.          EXTENSION$ = MID$(EXTENSION$, 2)
  1941.       END SUB
  1942. '
  1943. '  $SUBTITLE: 'TRIMTRAIL - subroutine to trim off trailing characters'
  1944. '  $PAGE
  1945. '
  1946. '  SUBROUTINE NAME    --  TRIMTRAIL
  1947. '
  1948. '  INPUT PARAMETERS   --  PARAMETER           MEANING
  1949. '                         TRIM.PARM$  TIME IN SECONDS AFTER MIDNIGHT TO WAIT
  1950. '                                     BEFORE DISPLAYING
  1951. '                         TRIM.THIS$  WHAT CHARACTER TO TRIM OFF END
  1952. '
  1953. '  OUTPUT PARAMETERS  --  NONE
  1954. '
  1955. '  SUBROUTINE PURPOSE --  TO DISPLAY RBBS-PC's SYSOP MENU ON THE LOCAL SCREEN
  1956. '
  1957. 61840 SUB TRIMTRAIL (TRIM.PARM$,TRIM.THIS$) STATIC
  1958.       WHILE RIGHT$(TRIM.PARM$,1) = TRIM.THIS$
  1959.          TRIM.PARM$ = LEFT$(TRIM.PARM$,LEN(TRIM.PARM$) - 1)
  1960.       WEND
  1961.       END SUB
  1962. ' $SUBTITLE: 'FINDLAST - subroutine to find last occurence of a string'
  1963. ' $PAGE
  1964. '
  1965. '  SUBROUTINE NAME    -- FINDLAST
  1966. '
  1967. '  INPUT PARAMETERS   -- PARAMETER             MEANING
  1968. '                        LOOK.IN$           STRING TO LOOK INTO
  1969. '                        LOOK.FOR$          STRING TO SEARCH FOR
  1970. '
  1971. '  OUTPUT PARAMETERS  -- WHERE.FOUND        POSITION IN LOOK.IN$ THAT
  1972. '                                            LOOK.FOR$ FOUND
  1973. '                        NUM.FINDS          HOW MANY OCCURENCES IN LOOK.IN$
  1974. '
  1975. '  SUBROUTINE PURPOSE -- FINDS THE LAST OCCURANCE OF "LOOK.FOR$" IN "LOOK.IN$"
  1976. '                        AND RETURNS COUNT OF NUMBER OF OCCURENCES.  IF NONE
  1977. '                        ARE FOUND, BOTH RETURNED PARAMETERS ARE ZERO.
  1978. '
  1979.       SUB FINDLAST (LOOK.IN$,LOOK.FOR$,WHERE.FOUND,NUM.FINDS) STATIC
  1980. 61850 WHERE.FOUND = INSTR(LOOK.IN$,LOOK.FOR$)
  1981.       NUM.FINDS = -(WHERE.FOUND > 0)
  1982.       NEXT.FOUND = INSTR(WHERE.FOUND + 1,LOOK.IN$,LOOK.FOR$)
  1983.       WHILE NEXT.FOUND > 0
  1984.          NUM.FINDS = NUM.FINDS + 1
  1985.          WHERE.FOUND = NEXT.FOUND
  1986.          NEXT.FOUND = INSTR(WHERE.FOUND + 1,LOOK.IN$,LOOK.FOR$)
  1987.       WEND
  1988.       END SUB
  1989. ' $SUBTITLE: 'SECURE - subroutine to assign security to commands'
  1990. ' $PAGE
  1991. '
  1992. '  SUBROUTINE NAME    -- SECURE
  1993. '
  1994. '  INPUT PARAMETERS   -- PARAMETER             MEANING
  1995. '                        SECTION$           NAME OF THE SECTION
  1996. '                        DEFAULTS$          DEFAULT COMMANDS FOR THE SECTION
  1997. '                        NUMBER.OF.COMMANDS NUMBER OF COMMANDS IN THE SECTION
  1998. '                        COMMANDS$()        CHARACTERS REPRESENTING THE ONE-
  1999. '                                              CHARACTER COMMANDS
  2000. '                        COMMANDS()         SECURITY LEVEL ASSOCIATED WITH
  2001. '                                           THE COMMAND
  2002. '                        SECTION.COMMANDS$  PROMPT STRING OF ALL COMMANDS IN
  2003. '                                             THE SECTION
  2004. '
  2005. '  OUTPUT PARAMETERS  -- COMMANDS$()        CHARACTERS REPRESENTING THE ONE-
  2006. '                                              CHARACTER COMMANDS
  2007. '                        COMMANDS()         SECURITY LEVEL ASSOCIATED WITH
  2008. '                                           THE COMMAND
  2009. '                        SECTION.COMMANDS$  PROMPT STRING OF ALL COMMANDS IN
  2010. '                                             THE SECTION
  2011. '
  2012. '  SUBROUTINE PURPOSE -- ALLOWS USERS TO MODIFY COMMANDS AND SECURITY FOR
  2013. '                        EACH COMMAND.
  2014. '
  2015.       SUB SECURE (SECTION$,DEFAULTS$,NUMBER.OF.COMMANDS,COMMANDS$(2),COMMANDS(1),SECTION.COMMANDS$) STATIC
  2016. 61860 IF IPAGE = 2 OR _
  2017.          VAL(OPTION$) = 310 THEN _
  2018.          XX$ = "ALL " + _
  2019.                SECTION$ + _
  2020.                " commands use default letters?" _
  2021.       ELSE XX$ = "ALL " + _
  2022.                SECTION$ + _
  2023.                " commands = SAME security level?"
  2024.       LOCATE 24,1
  2025.       PRINT SPACE$(79);
  2026.       LOCATE 24,1
  2027.       CALL GETNUMYN (XX$,AB)
  2028.       IF NOT AB THEN _
  2029.          GOTO 61880
  2030. 61870 IF IPAGE = 2 OR _
  2031.          VAL(OPTION$) = 310 THEN _
  2032.          SECTION.COMMANDS$ = DEFAULTS$ : _
  2033.          FOR I = 1 TO NUMBER.OF.COMMANDS : _
  2034.             COMMANDS$(I,2) = MID$(SECTION.COMMANDS$,I,1) : _
  2035.          NEXT : _
  2036.          EXIT SUB
  2037.       CALL MMINTEGER("Security level for all " + _
  2038.                       SECTION$ + _
  2039.                      " commands is?",-32767,32767,B1)
  2040.       FOR I = 1 TO NUMBER.OF.COMMANDS
  2041.          COMMANDS(I) = B1
  2042.       NEXT
  2043.       GB = B1
  2044.       EXIT SUB
  2045. 61880 GOSUB 61900
  2046.       IROW = 4
  2047.       ICOL = 10
  2048.       FOR I = 1 TO NUMBER.OF.COMMANDS
  2049.          LOCATE IROW + I,ICOL
  2050.          IF IPAGE = 2 OR _
  2051.             VAL(OPTION$) = 310 THEN _
  2052.             PRINT COMMANDS$(I,1);" ";COMMANDS$(I,2) _
  2053.          ELSE PRINT COMMANDS$(I,1);STR$(COMMANDS(I))
  2054.       NEXT
  2055. 61890 CALL ASKRO("Enter first character of command ([ENTER] quits)",24,X$)
  2056.       IF X$ = "" THEN _
  2057.          EXIT SUB
  2058.       IF LEN(X$) <> 1 THEN _
  2059.          GOTO 61890
  2060.       CALL ALLCAPS(X$)
  2061.       FF = INSTR(DEFAULTS$,X$)
  2062.       IF FF = 0 THEN _
  2063.          GOTO 61890
  2064.       IF IPAGE = 2 OR _
  2065.          VAL(OPTION$) = 310 THEN _
  2066.          GOTO 61892
  2067.       CALL MMINTEGER("Security level for all " + _
  2068.                       SECTION$ + _
  2069.                      " '" + _
  2070.                      X$ + _
  2071.                      "' commands is?",-32767,32767,B1)
  2072.       GOTO 61893
  2073. 61892 CALL ASKRO("New command for " + _
  2074.                   MID$(COMMANDS$(FF,1),1,INSTR(COMMANDS$(FF,1),"  ")) + _
  2075.                  "is?",24,HK$)
  2076.       IF HK$ = CHR$(34) THEN _
  2077.          GOTO 61892
  2078.       X$ = MID$(HK$,1,1)
  2079.       CALL ALLCAPS (X$)
  2080.       IF LEN(HK$) > 1 THEN _
  2081.          HK$ = X$ + MID$(HK$,2)
  2082.       IF LEN (HK$) = 1 THEN _
  2083.          HK$ = X$
  2084.       COMMANDS$(FF,2) = HK$
  2085.       MID$(SECTION.COMMANDS$,FF,1) = HK$
  2086.       GOTO 61880
  2087. 61893 COMMANDS(FF) = B1
  2088.       GOTO 61880
  2089. '
  2090. ' * COMMON ROUTINE TO DISPLAY SUBSYSTEM COMMANDS AND THEIR SECURITY LEVELS
  2091. '
  2092. 61900 CLS
  2093.       I! = FRE(C$)
  2094.       COLOR 0,7,0
  2095.       LOCATE 1,23
  2096.       PRINT "RBBS-PC "+ CONFIG.VERSION$ + " Default Configuration";
  2097.       COLOR FG,BG,BORDER
  2098.       LOCATE  2,5
  2099.       PRINT "The RBBS-PC " + _
  2100.              SECTION$ + _
  2101.             " Commands are as follows:"
  2102.       LOCATE   3,10
  2103.       XX$ = "Command             Security"
  2104.       IF IPAGE = 2 OR _
  2105.          VAL(OPTION$) = 310 THEN _
  2106.          XX$ = "Description         Command"
  2107.       PRINT XX$
  2108.       RETURN
  2109.       END SUB
  2110. '  $SUBTITLE: 'GETCOLOR - get colors using natural language'
  2111. '  $PAGE
  2112. '
  2113. '  SUBROUTINE NAME    -- GETCOLOR
  2114. '
  2115. '  INPUT PARAMETERS   -- PARAMETER             MEANING
  2116. '                        STRNG$             TITLE OF WHAT COLOR IS FOR
  2117. '                        NUM.COLOR          CURRENT COLOR SETTING
  2118. '
  2119. '  OUTPUT PARAMETERS  -- NUM.COLOR          NEW COLOR SETTING
  2120. '
  2121. '  SUBROUTINE PURPOSE -- SET THE COLOR USING NATURAL LANGUAGE PHRASES
  2122. '
  2123.       SUB GETCOLOR (STRNG$,NUM.COLOR) STATIC
  2124.       CLS
  2125. 61950 IF NUM.COLOR > 7 THEN _
  2126.          X = NUM.COLOR - 8 _
  2127.       ELSE X = NUM.COLOR
  2128.       X$ = MID$("<none>Blue  Green Cyan  Red   PurpleYellowWhite",X*6+1,6)
  2129.       LOCATE 9,15
  2130.       PRINT STRNG$;" now ";X$;"     ";
  2131. 61955 CALL ASKRO ("Make N)one,R)ed,G)reen,Y)ellow,B)lue,P)urple,C)yan,W)hite,[ENTER] quits",20,ANS$)
  2132.       IF ANS$ = "" THEN _
  2133.          EXIT SUB
  2134.       CALL ALLCAPS (ANS$)
  2135.       Y = INSTR("NBGCRPYW",ANS$) - 1
  2136.       IF Y < 0 THEN _
  2137.          GOTO 61955
  2138.       NUM.COLOR = Y
  2139.       GOTO 61950
  2140.       END SUB
  2141. ' $SUBTITLE: 'GETANSI - SUBROUTINE TO GET CALLERS COLOR VALUES'
  2142. ' $PAGE
  2143. '
  2144. '  SUBROUTINE NAME    -- GETANSI
  2145. '
  2146. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  2147. '                        SELECTION$       NAME OF SELECTION TO HAVE COLOR
  2148. '                        PRMPT$           WHAT TO PROMPT ON THE SCREEN
  2149. '
  2150. '  OUTPUT PARAMETERS  -- FG.1.DEF$        FIRST COLOR SELECTION
  2151. '                        FG.2.DEF$        SECOND COLOR SELECTION
  2152. '                        FG.3.DEF$        THIRD COLOR SELECTION
  2153. '                        FG.4.DEF$        FOURTH COLOR SELECTION
  2154. '
  2155. '  SUBROUTINE PURPOSE -- ASK THE SYSOP TO SELECT THE FOUR COLORS TO BE
  2156. '                        USED FOR CALLERS THAT SELECT COLOR DISPLAYS.
  2157. '
  2158.       SUB GETANSI (SELECTION$,PRMPT$) STATIC
  2159.       CLS
  2160. 62000 LOCATE 8,10
  2161.       PRINT PRMPT$;" Foreground for caller now ";SELECTION$;"       "
  2162.       LOCATE 10,1
  2163.       PRINT "Current foreground selections: ";
  2164.       CALL COLORCODE (FG.1.DEF$,X$,X)
  2165.       COLOR X,CALLER.BKGRD
  2166.       PRINT "First ";
  2167.       CALL COLORCODE (FG.2.DEF$,X$,X)
  2168.       COLOR X
  2169.       PRINT "Second ";
  2170.       CALL COLORCODE (FG.3.DEF$,X$,X)
  2171.       COLOR X
  2172.       PRINT "Third ";
  2173.       CALL COLORCODE (FG.4.DEF$,X$,X)
  2174.       COLOR X
  2175.       PRINT "Fourth"
  2176.       COLOR FG,BG
  2177. 62040 CALL ASKRO ("Make N)one,R)ed,G)reen,Y)ellow,B)lue,P)urple,C)yan,W)hite,[ENTER] quits",14,ANS$)
  2178.       IF ANS$ = "" THEN _
  2179.          EXIT SUB
  2180.       CALL ALLCAPS (ANS$)
  2181.       X = INSTR("NRGYBPCW",ANS$)
  2182.       IF X < 2 THEN _
  2183.          SELECTION$ = NONE.PICKED$ : _
  2184.          GOTO 62000
  2185.       X$ = MID$("Red   Green YellowBlue  PurpleCyan  White",X*6-11,6)
  2186.       CALL ASKRO ("Make "+X$+" [B]right, or N)ormal",17,ANS$)
  2187.       CALL ALLCAPS (ANS$)
  2188.       IF ANS$ <> "N" THEN _
  2189.          SELECTION$ = "Bright " + X$ _
  2190.       ELSE SELECTION$ = "Normal " + X$
  2191.       GOTO 62000
  2192.       END SUB
  2193. ' $SUBTITLE: 'COLORCODE - SUBROUTINE TO GET COLOR CODES'
  2194. ' $PAGE
  2195. '
  2196. '  SUBROUTINE NAME    -- COLORCODE
  2197. '
  2198. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  2199. '                        NAT.LANG.COLOR$  NATURAL LANGUAGE LETTER OF COLOR
  2200. '                                           N = NONE
  2201. '                                           B = BLUE
  2202. '                                           G = GREEN
  2203. '                                           C = CYAN
  2204. '                                           R = RED
  2205. '                                           P = PURPLE
  2206. '                                           Y = YELLOW
  2207. '                                           W = WHITE
  2208. '
  2209. '  OUTPUT PARAMETERS  -- ANSI.COLOR$      CORRECT CHARACTER SEQUENCE OF COLOR
  2210. '                        BASIC.FG         NUMBER FOR BASIC FORGROUND
  2211. '
  2212. '  SUBROUTINE PURPOSE -- TO CONVERT THE NATURAL LANGUAGE COLOR SELECTION INTO
  2213. '                        COLOR CODES THAT ARE MEANINGFUL.
  2214. '
  2215.       SUB COLORCODE (NAT.LANG.COLOR$,ANSI.COLOR$,BASIC.FG) STATIC
  2216.       BASIC.FG = 7
  2217.       IF NAT.LANG.COLOR$ = NONE.PICKED$ THEN _
  2218.          ANSI.COLOR$ = "" : _
  2219.          EXIT SUB
  2220.       X = INSTR(" BN",LEFT$(NAT.LANG.COLOR$,1))
  2221.       IF X < 2 THEN _
  2222.          EXIT SUB
  2223.       X$ = MID$("10",X-1,1)
  2224.       X = INSTR(NAT.LANG.COLOR$," ")
  2225.       IF X < 1 OR X >= LEN(NAT.LANG.COLOR$) THEN _
  2226.          EXIT SUB
  2227.       Z$ = MID$(NAT.LANG.COLOR$,X+1,1)
  2228.       X = INSTR("RGYBPCW",Z$)
  2229.       IF X < 1 THEN _
  2230.          EXIT SUB
  2231.       BASIC.FG = INSTR("BGCRPYW",Z$) - 8 * (X$="1")
  2232.       Y$ = MID$(STR$(30+X),2)
  2233.       Z = INSTR("NRGYBPCW",MID$("NBGCRPYW",CALLER.BKGRD+1,1))
  2234.       Z$ = MID$(STR$(39+Z),2)
  2235.       ANSI.COLOR$ = CHR$(27) + "[" + X$ + ";" + Z$ + ";" + Y$ + "m"
  2236.       END SUB
  2237. ' $SUBTITLE: 'ANSIDECODE - SUBROUTINE TO DECODE ANSI VALUES'
  2238. ' $PAGE
  2239. '
  2240. '  SUBROUTINE NAME    -- ANSIDECODE
  2241. '
  2242. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  2243. '                        ANSI.EXPRESSION$ EXPRESSION WITH ANSI COLOR CODES IN
  2244. '
  2245. '  OUTPUT PARAMETERS  -- ANSI.EXPRESSION$ ENGLISH LANGUAGE DESCRIPTION OF COLOR
  2246. '
  2247. '  SUBROUTINE PURPOSE -- DECODES THE ANSI EXPRESSION INTO A MEANINGFUL
  2248. '                        ENGLISH TEXT DESCRIPTION.
  2249. '
  2250.       SUB ANSIDECODE (ANSI.EXPRESSION$) STATIC
  2251.       IF LEN (ANSI.EXPRESSION$) < 3 THEN _
  2252.          EXIT SUB
  2253.       IF ASC(ANSI.EXPRESSION$) <> 27 THEN _
  2254.          EXIT SUB
  2255.       X = INSTR(ANSI.EXPRESSION$,";")
  2256.       IF X < 1 THEN _
  2257.          EXIT SUB
  2258.       IF MID$(ANSI.EXPRESSION$,X-1,1) = "1" THEN _
  2259.          X$ = "Bright " _
  2260.       ELSE X$ = "Normal "
  2261.       X = INSTR(X,ANSI.EXPRESSION$,"m")
  2262.       IF X < 1 THEN _
  2263.          EXIT SUB
  2264.       X = VAL(MID$(ANSI.EXPRESSION$,X-2,2)) - 30
  2265.       IF X < 1 OR X > 7 THEN _
  2266.          EXIT SUB
  2267.       ANSI.EXPRESSION$ = X$ + MID$("Red   Green YellowBlue  PurpleCyan  White",X*6-5,6)
  2268.       END SUB
  2269. 62100 ' set modem strings by selecting a modem
  2270.       SUB SELMODEM STATIC
  2271.       CALL FINDFILE ("MODEMS.SET",OK)
  2272.       IF OK THEN _
  2273.          GOTO 62103
  2274.       CALL MODEMINITCMD
  2275.       EXIT SUB
  2276. 62103 CLOSE 2
  2277.       IF NETWORK.TYPE = 6 THEN _
  2278.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
  2279.       ELSE OPEN "I",2,"MODEMS.SET"
  2280.       MODEM.MODEL = 0
  2281.       MODEM.PAGE = 0
  2282. 62105 CLS
  2283.       PRINT "NUMBER";
  2284.       LOCATE 1,10
  2285.       PRINT "Modem Model";
  2286.       LOCATE 1,40
  2287.       PRINT "Switch Settings";
  2288.       LOCATE 2,1
  2289.       PRINT STRING$(78,"-");
  2290.       FOR DISPLAY.LINE = 3 TO 19
  2291.          IF EOF(2) THEN _
  2292.             MODEM.PAGE = 1 : _
  2293.             GOTO 62110
  2294.          MODEM.MODEL = MODEM.MODEL + 1
  2295.          INPUT #2, MODEM.MODEL$, SWITCHES$
  2296.          FOR I = 1 TO 14                    ' # MODEMS.SET parms - 2
  2297.             INPUT #2,GARBAGE$
  2298.          NEXT
  2299.          LOCATE DISPLAY.LINE, 2
  2300.          PRINT MODEM.MODEL;
  2301.          LOCATE DISPLAY.LINE, 10
  2302.          PRINT MODEM.MODEL$;
  2303.          LOCATE DISPLAY.LINE, 40
  2304.          PRINT SWITCHES$;
  2305.       NEXT
  2306.       LOCATE DISPLAY.LINE + 1, 2
  2307.       PRINT " 0"
  2308.       LOCATE DISPLAY.LINE + 1, 10
  2309.       PRINT "Next Page"
  2310. 62110 LOCATE 24,10
  2311.       PRINT "Use Parameter 231 to initialize modem's firmware";
  2312.       CALL GETINIT("Select modem number, or [ENTER] to exit", _
  2313.                     22,MODEM.PAGE,MODEM.MODEL,MODEM.SELECTED, CR)
  2314.       IF CR THEN _
  2315.          EXIT SUB
  2316.       IF MODEM.SELECTED = 0 THEN _
  2317.          GOTO 62105
  2318.       CLOSE 2
  2319.       IF NETWORK.TYPE = 6 THEN _
  2320.          OPEN "MODEMS.SET" FOR INPUT SHARED AS #2 _
  2321.       ELSE OPEN "I",2,"MODEMS.SET"
  2322.       FOR I = 1 TO (MODEM.SELECTED - 1) * 16      ' # of parms * modem
  2323.          INPUT #2,GARBAGE$
  2324.       NEXT
  2325.       INPUT #2, MODEM.MODEL$, _
  2326.                 SWITCHES$, _
  2327.                 USER.ANSWER.COMMAND$, _
  2328.                 USER.COUNT.RINGS.COMMAND$, _
  2329.                 USER.GO.OFFHOOK.COMMAND$, _
  2330.                 USER.INIT.COMMAND$, _
  2331.                 USER.RESET.COMMAND$, _
  2332.                 USER.INITIALIZE.COMMAND$, _
  2333.                 USER.FIRMWARE.CLEAR.CMND$, _
  2334.                 USER.FIRMWARE.WRITE.CMND$, _
  2335.                 RTS$, _
  2336.                 MODEM.INIT.WAIT.TIME, _
  2337.                 MODEM.COMMAND.DELAY.TIME, _
  2338.                 COMMANDS.BETWEEN.RINGS, _
  2339.                 MODEM.INIT.BAUD$, _
  2340.                 KEEP.INIT.BAUD
  2341.       CLOSE 2
  2342.       END SUB
  2343. 62120 SUB MODEMINITCMD STATIC
  2344.       RTS$ = "NO"
  2345.       MODEM.INIT.WAIT.TIME = 3
  2346.       COMMANDS.BETWEEN.RINGS = FALSE
  2347.       FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0"
  2348.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"
  2349.       FIRMWARE.WRITE.COMMAND$ = "AT&W"
  2350.       KEEP.INIT.BAUD = FALSE
  2351.       MODEM.ANSWER.COMMAND$      = "ATQ0X1V1A"
  2352.       MODEM.COMMAND.DELAY.TIME   = 1
  2353.       MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
  2354.       MODEM.GO.OFFHOOK.COMMAND$  = "ATH1M0"
  2355.       'MODEM.GO.OFFHOOK.COMMAND$  = "ATQ1E1H1M0"
  2356.       MODEM.INIT.BAUD$           = "300"
  2357.       MODEM.INIT.COMMAND$        = "ATE0M0Q0V1X1S0=254S2=255S10=20"
  2358.       'MODEM.INIT.COMMAND$        = "ATM0Q1S2=255S10=30E0Q0X1S0=254  "
  2359.       MODEM.RESET.COMMAND$       = "ATZ"
  2360.       'USER.INITIALIZE.COMMAND$   = "AT&C1&D3B1E0V1M0S0=0&T5"
  2361.       'USER.FIRMWARE.WRITE.CMND$  = "&W"
  2362.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
  2363.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
  2364.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
  2365.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$
  2366.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
  2367.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
  2368.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
  2369.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
  2370.       END SUB
  2371.